Qt入門 基本概念(一)

Qt安裝

參考鏈接

Qt基礎部件

參考學習鏈接

.ui文件

在配置好Qt+VS的環境之後,雙擊.ui文件即可以看到ui的編輯頁面。
拖幾個部件進主窗體之後:
這裏寫圖片描述
運行VS程序就可以看到運行結果出現了編輯之後的效果。

打開你的ui類,我這裏的名字叫做ui_VSHelloWorld.h,這個類是你編輯.ui文件並且編譯程序之後生成的ui程序。

class Ui_VsHelloWorldClass
{
public:
    QPushButton *pushButton;
    QLabel *label;
    QComboBox *comboBox;
    QLineEdit *lineEdit;
    QCheckBox *checkBox;

    void setupUi(QWidget *VsHelloWorldClass);
    void retranslateUi(QWidget *VsHelloWorldClass);
}

類中的五個成員,分別對應Qt Designer中設計的.ui文件中的五個對象

修改.ui中對象的屬性

Qt Designer中設計ui程序的時候,可以將lineEdit默認textHello Qt
現在我們想將其設置爲My first Qt
可以在主窗口的構造函數中這樣寫:

ui.setupUi(this);
ui.lineEdit->setText("My first Qt");

窗口與控件

窗口:當一個部件沒有嵌入到其他部件中,則把這個部件叫作窗口或者頂層窗口,頂層窗口是沒有父窗口的,一般的,這些窗口都會被列在任務欄中。一般情況下,一個窗口會包含有標題欄,窗口邊框等。

在main函數中,可以聲明一個新的窗口。

//這是窗口,懸浮在主窗口之上
QLabel L;
L.setWindowTitle("new windows");
L.setText("windows");
L.resize(200, 100);
L.show();

控件:當一個窗口嵌入到其它窗口中,則它本身的標題欄會隱藏,那這些窗口就叫作控件,也可以叫作非頂層窗口或子窗口。

在主窗口的構造函數中,可以聲明一個新的控件

//這是控件,在主ui上面
for(int i = 1; i <= 3; ++i)
{
    QPushButton* buttonChild = new QPushButton(this);
    buttonChild->setText(QString("im kongjian %1").arg(i));
    //子窗口的座標系是以父窗口的座標系爲基準的,並且默認情況下定位在父窗口的(0,0)點處,即窗口繪圖區域的左上角。
    //後創建的控件會覆蓋在先創建的控件上。
    buttonChild->resize(100 * i, 100*i);
    connect(buttonChild, SIGNAL(clicked()), buttonChild, SLOT(close()));
}

窗口的屬性

在主窗口的構造函數中,可以設置窗口的屬性。

    //設置窗口的背景顏色
    setAutoFillBackground(true);
    QPalette pa = this->palette();
    pa.setBrush(QPalette::Background, QBrush(Qt::green));
    setPalette(pa);

    //設置窗口透明度
    setWindowOpacity(0.9);

    //設置窗口標題
    setWindowTitle("windows Attributes"); 

    //設置懸停提示
    setToolTip("stop mouse");

    //重設大小
    resize(600, 400);

    //移動,相對於左上角是00
    move(100, 100);

命令信號與槽

信號

作用:確定類是否發生改變。

  • 聲明信號signals
  • 發送信號emit
  1. 所有的信號聲明都是公共的,所以Qt規定不能在signals前面加public,private, protected。
  2. 所有的信號都沒有返回值,所以返回值都用void。
  3. 所有的信號都不需要定義,只需要聲明。
  4. 必須直接或間接繼承自QOBject類,並且開頭私有聲明包含Q_OBJECT。

槽其實就是普通的C++函數,它唯一特點就是能和信號鏈接。當和它鏈接的信號被髮出時,這個槽就會被調用。

  • 聲明槽 public/protected/private slots:

命令 connected

鏈接信號與槽。
原型1:

static QMetaObject::Connection connect(
    const QObject *sender, //信號發送對象指針
    const char *signal,    //信號函數字符串,使用SIGNAL()
    const QObject *receiver, //槽函數對象指針
    const char *member, //槽函數字符串,使用SLOT()
    Qt::ConnectionType = Qt::AutoConnection//連接類型,一般默認即可
);

//例如
connect(pushButton, SIGNAL(clicked()), dialog,  SLOT(close()));

原型2:

static QMetaObject::Connection connect(
    const QObject *sender, //信號發送對象指針
    const QMetaMethod &signal,//信號函數地址
    const QObject *receiver, //槽函數對象指針
    const QMetaMethod &method,//槽函數地址
    Qt::ConnectionType type = Qt::AutoConnection//連接類型,一般默認即可
);

//例如
connect(pushButton, QPushButton::clicked, dialog,  QDialog::close);

我喜歡將命令讀作:
若 信號sender.signals發生 則執行 receiver.slots

主窗口中的槽:on_對象名_信號名

在主窗口中聲明槽:

public slots:
    void on_pushButton_toggled(bool checked) const;

相當於自動調用了命令:

connect(ui.pushButton, &QPushButton::toggled, this, &SignalsAndSlots2::on_pushButton_toggled);

QWidget、QDialog、QMainWindow的異同點

參考鏈接

QWidget繼承於QObjectQPaintDevice
QDialogQMainWindow則繼承於QWidget

QWidget

QWidget類是所有用戶界面對象的基類。

QDialog

QDialog類是對話窗口的基類。
對話框窗口是一個頂級窗體,主要用於短期任務以及和用戶進行簡要通訊。

QMainwindow

QMainWindow類提供一個有菜單條、工具欄、狀態條的主應用程序窗口。

QMainWindow擁有自己的佈局,我們可以使用QMenuBar(菜單欄)、QToolBar(工具欄)、QStatusBar(狀態欄)以及QDockWidget(懸浮窗體),佈局有一個可由任何種類小窗口所佔據的中心區域。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章