1. qt-designer顯示的界面可以保存為圖片嗎
可以的。
先在Qt打開一張圖片並顯示在QLabel控制項中,然後Qt截取QLabel控制項上的內容,並另存為。Qt利用OpenCV的imwrite函數另存為圖片,另存為時,圖片的格式寫全,比如:寫成img.jpg而不是img即可。
Qt是一個跨平台應用程序和UI開發框架。使用Qt您只需一次性開發應用程序,無須重新編寫源代碼,便可跨不同桌面和嵌入式操作系統部署這些應用程序。
2. Qt中如何利用 png 圖片來實現自定義形狀的窗口
使用 Qt::WindowFlags 可以實現一些不同類型的窗口,如:用 Qt::FramelessWindowHint 來實現無邊框窗口,用 Qt::Popup 來實現彈出式的窗口,用 Qt::Tool 來實現工具窗口,用Qt::CustomizeWindowHint 來關閉窗口標題欄以及與 Qt::WindowCloseButton(添加關閉按鈕),Qt::WindowMaximumButtonSize(添加最大化按鈕)聯用來建立只有關閉按鈕和最大化按鈕的窗口,用 Qt::WindowStaysOnTopHint 使窗口永遠在最前端等。 Qt::WidgetAttribute 使窗口支持透明背景以及在關閉後主動銷毀。其它一些常用的 Attribute 有:Qt::WA_AcceptDrops 使 widget 支持拖拽操作,Qt::WA_MouseTracking 使 widget 及時響應滑鼠移動事件(MouseMoveEvent)。 Qt::setMask() 函數對窗口進行部分區域遮掩來實現各種形狀的窗口。部分代碼解釋:頭文件: 1:#ifndef SHAPEDWIDGET_H 2:#define SHAPEDWIDGET_H 3: 4:#include <QWidget> 5:class QPoint; 6:class QPixmap; 7:class ShapedWidget : public QWidget 8: { 9: Q_OBJECT 10:public: 11:explicit ShapedWidget(QWidget *parent = 0); 12: ~ShapedWidget(); 13: 14:private slots: 15:void changeSkin(); 16: 17:protected: 18:void mousePressEvent(QMouseEvent *); 19:void mouseMoveEvent(QMouseEvent *); 20:void paintEvent(QPaintEvent *); 21: 22:private: 23:void initData(); 24:void initVisualComponents(); 25:void setupContextMenu(); 26: 27: QPoint* dragPos_; 28: QPixmap* backgroundPixmap_; 29: }; 30: 31:#endif // SHAPEDWIDGET_H構造: 1: ShapedWidget::ShapedWidget(QWidget *parent) : 2: QWidget(parent, Qt::FramelessWindowHint) //無邊框窗體 3: { 4: initData(); //初始化數據,這個demo裡面就兩個,具體下面有解釋 5: initVisualComponents(); //初始化私有可視部件,這個demo裡面沒有私有的其它部件,所以只做了窗口的一些屬性設置 6: setupContextMenu(); //設置右鍵菜單,分配各種QAction內存空間以及連接SIGNALS和SLOTS 7: setAttribute(Qt::WA_DeleteOnClose); //關閉事件發生後就主動從內存中銷毀窗口 8: setAttribute(Qt::WA_TranslucentBackground); //透明背景支持 9: } 拖拽移動窗體(下面有圖示): 1:void ShapedWidget::mousePressEvent(QMouseEvent *event) 2: { 3:if(event->button() == Qt::LeftButton) 4: { 5: *dragPos_ = event->globalPos() - frameGeometry().topLeft(); 6: event->accept(); 7: } 8: } 9: 10:void ShapedWidget::mouseMoveEvent(QMouseEvent *event) 11: { 12:if(event->buttons() & Qt::LeftButton) 13: { 14: move(event->globalPos() - *dragPos_); 15: event->accept(); 16: } 17: } 窗口繪制: 1:void ShapedWidget::paintEvent(QPaintEvent *) 2: { 3: QPainter painter(this); 4: painter.fillRect(0, 0, backgroundPixmap_->width(), backgroundPixmap_->height(), *backgroundPixmap_); 5: } 更換皮膚: 1:void ShapedWidget::changeSkin() 2: { 3: QAction* source = qobject_cast<QAction*>(sender()); //獲取發送該信號的信號源,並轉換對象 4: backgroundPixmap_->load(source->data().toString()); //因為給每個 QAction 賦了圖片的地址的字元串 5://所以可以通過 data() 來獲取該值,並更新背景圖片的內容 6: resize(backgroundPixmap_->width(), backgroundPixmap_->height()); //窗口大小盡可能小
3. qt怎樣讓一個窗口以圖片的方式保存
用render方法保存.例子:
https://qt-project.org/doc/qt-4.8/qwidget.html#render
4. 如何把Qt窗口內的東西 轉換為圖片
QPixmap::grabWindow(...)
或
QWidget::render(...)
5. qt中主窗口背景設置
以前遇到的很多小知識,從今天開始都一點一點記錄下來。。。
窗口背景無非兩種:背景色、背景圖片。Qt中窗口背景如何設置?下面介紹三種方法:
一、QPalette設置背景
二、實現paintEvent,使用QPainter來繪制背景
三、使用QSS來設置背景
關於QSS的使用不想多說,一般我不用QSS設置窗口背景,也不建議使用。(注意:這里是對於窗口而言)。如果是子部件當然可以。因為窗口使用QSS設置背景之後,若子部件不使用同樣的方式來設置,默認則會繼承父窗口的樣式
子部件一般情況下也不需要設置背景圖片,即使需要使用QSS也完全可以滿足。設置較多的是背景色與圖標,QSS中使用background或者background-color的方式可以實現背景色的設置,圖標則可以使用setPixmap或者setIcon來設置!
下面介紹QPalette以及paintEvent
一、QPalette設置背景
構造函數中可以使用如下方式:
(1)設置背景色
QPalette palette(this->palette());
palette.setColor(QPalette::Background, Qt::black);
this->setPalette(palette);
或:
QPalette palette;
palette.setBrush(this->backgroundRole(), Qt::black);
this->setPalette(palette);
這里setColor和setBrush都可以使用!
(2)設置背景圖片
QPixmap pixmap = QPixmap(":/qm/safe").scaled(this->size());
QPalette palette(this->palette());
palette.setBrush(QPalette::Background, QBrush(pixmap));
this->setPalette(palette);
上面方式無論設置背景色還是背景圖片QPalette::Background與this->backgroundRole()是等價的!
二、paintEvent設置背景
(1)設置背景色
void IIIMark::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setBrush(Qt::black);
painter.drawRect(this->rect());
}
(2)設置背景圖片
void IIIMark::paintEvent(QPaintEvent *)
{
QPixmap pixmap = QPixmap(":/qm/safe").scaled(this->size());
QPainter painter(this);
painter.drawPixmap(this->rect(), pixmap);
}
注意:
(1)以上都是用scaled方式對圖片進行了適應窗口大小的設置,因為所給的圖片大小不一定滿足要求,所以採用此方式!當然圖片經過拉伸或者壓縮之後會變形(純色圖片除外),所以對圖片採用此方式時需要注意。
(2)設置背景范圍的時候如果需要充滿整個窗口最好使用this->rect(),因為我看到很多人在使用QRect(0, 0, 400, 400)之類的語句,那麼如果窗口大小改變了呢?此句是不是要跟著變呢?
(3)如果需要背景圖片或者背景色隨可以發生改變時,也就是所謂的換膚功能,則採用paintEvent的方式,在需要改變的時候使用update()來進行更新。
(4)this->setAutoFillBackground(true)又讓我想起了tr(),被很多人濫用。這句話在什麼時候使用呢?不妨採用QPalette設置背景的方式加上與去掉這句話對比一下(在有父窗口的情況下使用)。如果這個QWidget直接show,則有背景色,如果放到一個父窗口中,就沒有效果。添加該句即可!
6. 在ubuntu中 怎樣用qt designer編寫生成一個界面可以顯示圖形
用快速開發工具Qt Designer編寫Qt程序
我們用的開發系統是Linux,開發工具是Qt Designer.如果大家安裝完整版的Linux,系統就帶這個工具了.大家可以點擊應用程序->編程->Qt Designer來找到它.
Qt Designer首先呈現給用戶的是一個New/Open對話框。因為這里要創建一個C++程序,所以在此選擇C++ Project,點擊「OK」繼續。
選擇一個想要保存文件的位置,並且給出一個文件名,注意這里文件名的擴展名一定要是.pro。點擊「OK」後,到下面的界面.
現在我們看到的就是Qt Designer主窗口,確保Property Editor可見。如果它是不可見的,用戶可以通過Windows→Views→Property Editor/Signal Handlers選單選項來使其可見.
下面我們建立一個如下圖所示的對話框.
通過選擇File→New選單,然後選擇Dialog來創建一個新的對話框。這時Qt Designer會創建一個新的空白對話框,用戶可以在其上放置輸入框和按鈕。
打開Property Editor,把name的值改為「MainForm」,把caption的值改為「Hello world」。 '
然後我們在對話框上拖拽上一個lable,方法是在左面Toolbox的common widgets里的TextLabel,然後在空白對話框上畫一下.改一下caption的值改為「Hello world」就得到如下的界面了.
現在就已經基本完成這個應用程序了。不過在編譯和運行此應用程序之前,還要創建一個main.cpp文件。方法是選擇File→New→C++Main- File(main.cpp),只需接受預設的配置即可。main.cpp會自動在Code Editor中打開。因為這里無需改變main.cpp中的 任何東西,所以直接將Code Editor窗口關閉,並且保存main.cpp。
到此為止,在Qt Designer中的工作已經完成了。保存整個項目,下面來編譯和運行這個程序。在編譯程序之前,要首先生成它的Makefile文件。打開一個終端,然後切換至保存有項目的位置,使用以下命令來生成Makefile文件:
#qmake -o Makefile hellopro
現在,就可以運行make來編譯程序了,根據系統的性能,這個步驟需要花費一點時間。當編譯工作完成後,輸入./hello來運行程序。如果一切正常,用戶應該已經看到程序了。
下面是我電腦上程序的界面:
到這里我們完成了第一個Qt的程序,怎麼樣呢,是不是有點小成就感.
7. Qt在界面設計時怎麼給窗口添加背景圖片
這是一種方式:
QPixmap pixmap(QString::fromUtf8("./icon/background.png"));//當前文件夾下面的圖片
QPalette palette = this->palette();
palette.setBrush(backgroundRole(), QBrush(pixmap));
setPalette(palette);
還有一種添加資源文件,在資源文件裡面直接添加
8. linux下的Qt如何設置主窗口的背景圖片,用手寫代碼的那種
Qt4版本以上可在構造函數中加入如下代碼
RcMainWindow::RcMainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::RcMainWindow)
{
ui->setupUi(this);
QPixmap pixmap(":/img/background.bmp");
QPalette palette;
palette.setBrush(backgroundRole(), QBrush(pixmap));
setPalette(palette);
}
此外也可實現繼承自父類QMainWindow的虛函數paintEvent,並在該函數中加入同樣代碼。
9. qt中如何添加窗體背景圖片如何改變窗體背景顏色
一,
添加窗體背景
在窗體構造函數中加入:方法1:
this-setStyleSheet(tr("background:url(pic.jpg)"));方法二:
this-setAutoFillBackground(true);
QPalette
myPalette;
myPalette.setBrush(this-backgroundRole(),
QBrush(QPixmap("./pic.jpg")));
this-setPalette(myPalette);
二,改變背景顏色在窗體構造函數中加入: