程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> lesson3-Qt對話框

lesson3-Qt對話框

編輯:關於PHP編程

lesson3-Qt對話框


一、QDialog類
1、對話框的概念
對話框在各種軟件中都會使用到,一般用來給用戶提示信息或者接收用戶反饋的信息,因此對話框是應用程序和用戶交互的平台。
對話框是一個頂層窗口,不能嵌入到其他窗口中。
2、對話框的種類
1)、模式對話框,該應用程序的其他窗口不能被訪問,必須等待當前對話框消失,顯示模式對話框一般調用它的exec()函數
2)、非模式對話框,該應用程序的其他窗口還能繼續被訪問,顯示非模式對話框一般調用它的show()函數
3、QDialog類的父類是QWidget





二、QDialog的派生類
為了方便開發人員的使用,Qt對一些特殊功能的對話框做了封裝,提供一套標准的對話框。這些內建對話框提供靜態函數便於使用,通常都是調用系統本地的對話框
1、QFileDialog

使用方法:
1、打開文件對話框,返回選擇的文件名
QString str = QFileDialog::getOpenFileName(
父窗口,
對話框名字,
默認選擇路徑,
文件過濾器);
2、根據名字打開文件,成功返回true,失敗返回false
QFile file(str);
file.open(QIODevice::ReadWrite);
3、得到一個輸入流
QTextStream in(&file);
4、逐行讀出輸入流
in.readLine();


2、QColorDialog

使用方法:
1、獲取調色板
QPalette palette = textEdit->palette();
2、打開顏色對話框,獲取顏色
QColor color = QColorDialog::getColor(
palette.color(QPalette::Text), //對話框初始顏色
this //父窗口
);
3、設置調色板顏色
palette->setColor(
QPalette::Text, //要設置的調色板的部位
color //要設置的顏色
);
4、加載調色板
textEdit->setPalette(palette);

GUI為不同的部位分別設置了顏色標志


3、QFontDialog


使用方法:
1、打開字體對話框,獲取字體
bool ok;
QFont font = QFontDialog::getFont(&ok);
如果點擊對話框的“確定”按鈕,那麼ok的值就會變為true;如果點擊對話框的“取消”按鈕,那麼ok的值就會變為false
2、設置字體
textEdit->setFont(font);

4、QInputDialog

使用方法:
打開輸入對話框,輸入的內容會返回
QString str = QInputDialog::getText(
this, //父窗口
“inputDialog”, //窗口標題
“please input”, //輸入框上面的標簽文字
QLineEdit::Normal, //編輯框的顯示方式
QDir::home(), //編輯框默認的內容
ok //回填bool變量
)

5、QProgressDialog

QProgress::setRange(0,100) //設置進度條范圍
QProgress::setValue(50) //設置進度條當前值

三、QMessageBox
Qt提供了幾種顯示信息的消息框,這些消息框都是模態對話框,平時在軟件裡面會經常用到
1、QMessageBox::question
一個具有標題和文本的消息詢問框,開發人員可以根據具體需要定制按鈕的個數和按鈕的作用

2、QMessageBox::informat
一個具有標題和提示文本的提示消息框,開發人員可以根據具體需要定制按鈕的個數和按鈕的作用

3、QMessageBox::warning
一個具有標題和文本信息的警示消息框,開發人員可以根據具體需要定制按鈕的個數和按鈕的作用

4、QMessageBox::critical
一個具有標題和文本信息的致命信息框,開發人員可以根據具體需要定制按鈕的個數和按鈕的作用

5、QMessageBox::about
一個具有標題和文本的消息框

6、QMessageBox::aboutQt
顯示關於Qt的消息框

7、消息按鈕的制訂



四、QDialog實例
1、頭文件
  1. #ifndef BUILDINDIALOG_H
  2. #define BUILDINDIALOG_H

  3. #include

  4. class buildInDialog : public QDialog
  5. {
  6. Q_OBJECT
  7. public:
  8. buildInDialog();
  9. private:
  10. QPushButton *fileBtn;
  11. QPushButton *colorBtn;
  12. QPushButton *fontBtn;
  13. QPushButton *saveBtn;
  14. QPushButton *closeBtn;

  15. QTextEdit *textEdit;
  16. private slots:
  17. void fileSlot();
  18. void colorSlot();
  19. void fontSlot();
  20. void saveSlot();
  21. void closeSlot();

  22. };



  23. #endif
2、實現文件
  1. #include "buildInDialog.h"

  2. buildInDialog::buildInDialog()
  3. {
  4. fileBtn = new QPushButton("open");
  5. colorBtn = new QPushButton("color");
  6. fontBtn = new QPushButton("font");
  7. saveBtn = new QPushButton("save");
  8. closeBtn = new QPushButton("close");

  9. textEdit = new QTextEdit();


  10. //布局
  11. QVBoxLayout *vLay = new QVBoxLayout();
  12. QHBoxLayout *hLay = new QHBoxLayout();
  13. vLay->addWidget(fileBtn);
  14. vLay->addWidget(colorBtn);
  15. vLay->addWidget(fontBtn);
  16. vLay->addWidget(saveBtn);
  17. vLay->addWidget(closeBtn);

  18. hLay->addWidget(textEdit);
  19. hLay->addLayout(vLay);

  20. setLayout(hLay);

  21. connect(fileBtn, SIGNAL(clicked()), this, SLOT(fileSlot()));
  22. connect(colorBtn, SIGNAL(clicked()), this, SLOT(colorSlot()));
  23. connect(fontBtn, SIGNAL(clicked()), this, SLOT(fontSlot()));
  24. connect(saveBtn, SIGNAL(clicked()), this, SLOT(saveSlot()));
  25. connect(closeBtn, SIGNAL(clicked()), this, SLOT(closeSlot()));
  26. }

  27. void buildInDialog::fileSlot()
  28. {
  29. //獲取文件名字
  30. QString str = QFileDialog::getOpenFileName(this, "打開文件", "/", "All File(*.*)");

  31. //打開文件
  32. QFile file(str);
  33. if(!file.open(QIODevice::ReadWrite))
  34. return;
  35. //得到輸入流
  36. QTextStream in(&file);
  37. //讀取數據
  38. while(!in.atEnd())
  39. {
  40. QString st = in.readLine();
  41. textEdit->append(st);
  42. }
  43. }

  44. void buildInDialog::colorSlot()
  45. {
  46. //獲取條色板
  47. QPalette palette = textEdit->palette();
  48. //打開對話框,獲取顏色
  49. QColor color = QColorDialog::getColor(palette.color(QPalette::Text), this);

  50. if(color.isValid())
  51. {
  52. //將顏色放到條色板
  53. palette.setColor(QPalette::Window, color);
  54. //加載調色板
  55. textEdit->setPalette(palette);
  56. }

  57. }

  58. void buildInDialog::fontSlot()
  59. {
  60. bool ok;
  61. QFont font = QFontDialog::getFont(&ok);
  62. if(ok)
  63. textEdit->setFont(font);
  64. }

  65. void buildInDialog::saveSlot()
  66. {
  67. bool ok;
  68. //獲取輸入的信息
  69. QString str = QInputDialog::getText(this, "輸入對話框", "請輸入名字", QLineEdit::Normal, "wj", &ok);

  70. //根據輸入的名字打開文件
  71. QFile file(str);
  72. file.open(QIODevice::WriteOnly);
  73. //獲取輸出流
  74. QTextStream out(&file);
  75. //將textEdit的內容寫入到out
  76. out<toPlainText()<<"\n";
  77. }

  78. void buildInDialog::closeSlot()
  79. {
  80. QProgressDialog *progress = new QProgressDialog();
  81. progress->setRange(0, 100);
  82. for(int i=0; i<=100; i+=10)
  83. {
  84. qApp->processEvents();
  85. progress->setValue(i);
  86. sleep(1);
  87. }
  88. }
3、主函數
  1. #include "buildInDialog.h"
  2. #include

  3. int main(int argc, char *argv[])
  4. {
  5. //設置編碼,防止漢字出現亂碼
  6. QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
  7. QApplication app(argc, argv);

  8. buildInDialog dialog;
  9. dialog.show();

  10. return app.exec();
  11. }




  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved