qt学习笔记(二)
QMainWindow
QMainWindow是一個為用戶提供主窗口程序的類,包含一個菜單欄(menu bar)、多個工具欄(tool bars)、多個錨接部件(dock widgets)、一個狀態欄(status bar)及一個中心部件(central widget),是許多應用程序的基礎,如文本編輯器,圖片編輯器等。
菜單欄、工具欄、狀態欄、鉚接部件、中心部件
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {resize(600, 400);//1.菜單欄 只能有一個QMenuBar *bar = menuBar();setMenuBar(bar);//創建菜單QMenu *fileMenu = bar->addMenu("文件");QMenu *editMenu = bar->addMenu("編輯");//創建菜單項QAction *newAction = fileMenu->addAction("新建");//分割線fileMenu->addSeparator();QAction *openAction = fileMenu->addAction("打開");//2.工具欄 可以有多個QToolBar *toolBar = new QToolBar(this);//往本MainWindow對象左側添加工具欄toolBaraddToolBar(Qt::LeftToolBarArea, toolBar);//設置只允許左右停靠toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);//設置浮動toolBar->setFloatable(false); //不允許浮動//設置是否可移動(總開關)toolBar->setMovable(false);//工具欄中放入小部件toolBar->addAction(newAction); //和菜單項的新建是一樣的toolBar->addSeparator();toolBar->addAction(openAction);//3.狀態欄(在MainWindow下方) 只有一個QStatusBar *stBar = statusBar(); //創建一個狀態欄//為MainWindow設置狀態欄setStatusBar(stBar);//標簽QLabel *label1 = new QLabel("左側提示信息", this);stBar->addWidget(label1);QLabel *label2 = new QLabel("右側提示信息", this);stBar->addPermanentWidget(label2);//4.鉚接部件 (浮動窗口) >=1QDockWidget *dock = new QDockWidget("aaa", this);// 將鉚接部件放置于核心部件的指定位置(這里放于其頂部)addDockWidget(Qt::BottomDockWidgetArea, dock);//核心部件 <= 1QTextEdit *edit = new QTextEdit(this);//void QMainWindow::setCentralWidget(QWidget *widget)setCentralWidget(edit);}效果:
資源文件添加
要將圖片文件夾放到項目文件夾下面
在qtcreater中文件夾右鍵選擇【添加新文件】,選擇【Qt】以及【Qt Resource File】
然后起個名,一路下一步,創建好資源文件。
在新建的資源文件右擊鼠標選中【Open in Editor】
將前綴修改為\即可
點添加選擇添加文件,選擇剛剛添加到項目文件夾下的資源文件
然后選擇構建->執行qmake,資源就會被導入進去
使用的時候:
路徑可以點擊圖標右擊有個copy路徑
ui->actionOpen->setIcon(QIcon(":/Image/LuffyQ.png"));模態和非模態對話框
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);//點擊新建 創建對話框connect(ui->actionNew, &QAction::triggered, this, [=](){//對話框:模態對話框(阻塞狀態)、非模態對話框//模態對話框開啟時別的窗口都不能選中,非模態對話框則可以//1.模態對話框QDialog dlg(this);dlg.resize(120, 30);//阻塞,導致其他窗口(部件)都不能被點擊dlg.exec();//非模態對話框//如果在棧上創建QDialog對象,會造成該控件顯示一閃而過//因為dlg2生命周期在函數結束就消失//QDialog dlg2(this);QDialog *dlg2 = new QDialog(this);dlg2->resize(200, 200);dlg2->show();//防止內存泄漏//55 Makes Qt delete this widget when the widget has accepted the close eventdlg2->setAttribute(Qt::WA_DeleteOnClose);}); }標準對話框
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);//點擊新建 創建對話框connect(ui->actionNew, &QAction::triggered, this, [=](){//QMessageBox對話框//1.錯誤提示對話框QMessageBox::critical(this, "錯誤", "critical");//2.信息提示對話框QMessageBox::information(this, "信息", "info");//3.詢問提示對話框//各種特定的對話框靜態函數的參數和返回值://param1 父窗口//param2 標題//param3 提示信息//param4 按鍵類型//param5 默認關聯回車的按鍵//返回值:用戶選擇的按鈕if(QMessageBox::Save == QMessageBox::question(this, "詢問", "question", QMessageBox::Save | QMessageBox::Cancel, QMessageBox::Cancel)){qDebug()<<"點擊了Save";}else{qDebug()<<"點擊了其他按鈕 ";}//警告提示對話框QMessageBox::warning(this, "警告", "warning");}); }其他對話框:QColorDialog、QFileDialog、QFontDialog
//顏色對話框//QColor color = QColorDialog::getColor(Qt::red);//rgb//qDebug()<<color.red() << color.green() << color.blue();//文件對話框//param3 默認路徑//param4 過濾文件//QString fileName = QFileDialog::getOpenFileName(this, "打開文件", "D:\\RjDir\\admin_7407499e-7fa7-4e1a-9d05-ac4e40b55c38\\Desktop", "(*.doc *.docx)");//qDebug()<<fileName;//字體對話框bool flag;QFont font = QFontDialog::getFont(&flag, QFont("等線",36));qDebug()<< "字體" <<font.family().toUtf8().data()<<"字號"<<font.pointSize()<<"是否加粗"<<font.bold()<<"是否傾斜"<<font.italic();可拖控件
彈簧 Horizontal Spacer來布局優化
用Widget包裹起控件進行布局操作
水平布局:針對控件在一條水平線上
垂直布局:針對控件在同一縱向上
QWidget相關屬性:sizePolicy
? minimumSize和maximumSize設置相同大小來固定窗體大小
layoutLeftMargin、layoutRightMargin、layoutTopMargin、layoutBottomMargin來設置控件與窗體左右邊界的距離(像素),設為0可讓控件能貼邊。
- QToolButton 工具按鈕,用于顯示圖片
- toolButtonStyle 設置顯示圖片還是顯示文字
- autoRaise透明突起效果
- QRadioBox單選按鈕
- 默認選擇 setChecked(true)
- QCheckBox 復選按鈕
- 按下會發出stateChanged信號,并帶有一個參數表示狀態。
Item Widgets
QListWidget控件
//QListWidget控件 //1.創建list項 //QListWidgetItem *item = new QListWidgetItem("舊時王謝堂前燕"); //2.將list項加入QlistWidget控件中 //ui->listWidget->addItem(item);//添加多個列表項 //QStringList 相當于QList<QString>類似于 list<string> QStringList list; //往list添加四個QString對象 list<<"床前明月光"<<"疑是地上霜"<<"舉頭望明月"<<"低頭思故鄉"; ui->listWidget->addItems(list);QTreeWidget樹控件
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);//QTreeWidget樹控件的使用//設置頭ui->treeWidget->setHeaderLabels(QStringList()<<"英雄"<<"英雄簡介");//創建出樹的節點控件QTreeWidgetItem *liItem = new QTreeWidgetItem(QStringList()<<"力量");QTreeWidgetItem *minItem = new QTreeWidgetItem(QStringList()<<"敏捷");QTreeWidgetItem *zhiItem = new QTreeWidgetItem(QStringList()<<"智力");//將節點掛到樹上ui->treeWidget->addTopLevelItem(liItem);ui->treeWidget->addTopLevelItem(minItem);ui->treeWidget->addTopLevelItem(zhiItem);QStringList heroL1, heroL2, heroM1, heroM2, heroZ1, heroZ2;heroL1 << "剛被豬" << "前排坦克,能在吸收傷害的同時造成可觀的范圍輸出";heroL2 << "船長" << "前排坦克,能肉能輸出能控場的全能英雄";heroM1 << "月騎" << "中排物理輸出,可以使用分裂利刃攻擊多個目標";heroM2 << "小魚人" << "前排戰士,擅長偷取敵人的屬性來增強自身戰力";heroZ1 << "死靈法師" << "前排法師坦克,魔法抗性較高,擁有治療技能";heroZ2 << "巫醫" << "后排輔助法師,可以使用奇特的巫術詛咒敵人與治療隊友";QTreeWidgetItem *l1 = new QTreeWidgetItem(heroL1);QTreeWidgetItem *l2 = new QTreeWidgetItem(heroL2);QTreeWidgetItem *m1 = new QTreeWidgetItem(heroM1);QTreeWidgetItem *m2 = new QTreeWidgetItem(heroM2);QTreeWidgetItem *z1 = new QTreeWidgetItem(heroZ1);QTreeWidgetItem *z2 = new QTreeWidgetItem(heroZ2);//往liItem下添加孩子節點項liItem->addChild(l1);liItem->addChild(l2);minItem->addChild(m1);minItem->addChild(m2);zhiItem->addChild(z1);zhiItem->addChild(z2); }效果:
QTableWidget控件
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);//QTableWidget控件的使用//設置列數ui->tableWidget->setColumnCount(3);//1.設置水平表頭ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性別"<<"年齡");//設置行數ui->tableWidget->setRowCount(5);QList<QString> nameList; //相當于STL的list<string>nameList<<"亞瑟"<<"安琪拉"<<"妲己"<<"趙云"<<"孫悟空";QStringList sexList;sexList<<"男"<<"女"<<"女"<<"男"<<"未知";//添加條目//ui->tableWidget->setItem(0, 0, new QTableWidgetItem(QString("亞瑟")));for(int i = 0;i < 5;++i){int col = 0;ui->tableWidget->setItem(i, col++, new QTableWidgetItem(nameList[i]));ui->tableWidget->setItem(i, col++, new QTableWidgetItem(sexList.at(i)));ui->tableWidget->setItem(i, col++, new QTableWidgetItem(QString::number(i + 18)));} }效果
其他控件
stackedWidget控件
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);//設置stackedWidget默認顯示頁面ui->stackedWidget->setCurrentIndex(0);//點擊按鈕切換 stacked容器connect(ui->btn_scrollArea, &QPushButton::clicked, [=](){ui->stackedWidget->setCurrentIndex(0);});connect(ui->btn_toolBox, &QPushButton::clicked, [=](){ui->stackedWidget->setCurrentIndex(1);});connect(ui->btn_tabWidget, &QPushButton::clicked, [=](){ui->stackedWidget->setCurrentIndex(2);});//下拉框ComboBox使用ui->comboBox->addItem("Google");ui->comboBox->addItem("FaceBook");ui->comboBox->addItem("Microsoft");//點擊按鈕,選中下拉框中Microsoft選項connect(ui->btn_select, &QPushButton::clicked, [=](){//ui->comboBox->setCurrentIndex(2);ui->comboBox->setCurrentText("Microsoft");});//利用QLabel顯示圖片,需導入資源ui->label_img->setPixmap(QPixmap(":/Image/sunny.png"));//利用QLabel顯示動圖 gifQMovie *movie = new QMovie(":/Image/mario.gif");ui->label_movie->setMovie(movie);movie->start();}效果
雜項
防止出現中文字符串導致報錯的方法:
頭部加上:
#pragma execution_character_set("utf-8")但是輸出的中文都會變成亂碼
中文字符串結尾加上空格,但是輸出時空格會被轉為???
總結
- 上一篇: 前端学习(2564):如何触发组件的更新
- 下一篇: 工作65:element三级文档多选