当前位置:嗨网首页>书籍在线阅读

22-代码创建其他界面组件

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

2.4.5 代码创建其他界面组件

至此,在UI设计器里已经设计了这个应用程序的主要界面功能。现在想要实现如图2-16所示的界面,在工具栏上增加一个SpinBox用于设置字体大小,增加一个FontComboBox来选择字体。当从组件面板里拖放一个SpinBox到工具栏上时,却发现工具栏“拒收”!同样,在状态栏上放一个Label和一个ProgreeBar也是被“拒收”的。这是UI设计器的局限性,某些界面效果无法用可视化设计方式实现。

为此,需要编写一些代码来实现这些无法可视化设计的界面功能。先在QWMainWind类定义里增加一些变量和函数定义,增加的定义如下:

class QWMainWind : public QMainWindow
{
private:
   QLabel     *fLabCurFile;//状态栏里显示当前文件的Label
   QProgressBar   *progressBar1;//状态栏上的进度条
   QSpinBox      *spinFontSize;// 字体大小spinBox
   QFontComboBox   *comboFont;//字体名称comboBox
   void   iniUI(); //代码实现的UI初始化
};

iniUI()函数用于创建这些界面组件,并添加到工具栏或状态栏,其实现代码如下:

void QWMainWind::iniUI()
{//状态栏上添加组件
   fLabCurFile=new QLabel; 
   fLabCurFile->setMinimumWidth(150);
   fLabCurFile->setText("当前文件:");
   ui->statusBar->addWidget(fLabCurFile);//添加到状态栏
   progressBar1=new QProgressBar; 
   progressBar1->setMaximumWidth(200); 
   progressBar1->setMinimum(5);
   progressBar1->setMaximum(50);
   progressBar1->setValue(ui->txtEdit->font().pointSize());
   ui->statusBar->addWidget(progressBar1); //添加到状态栏
//工具栏上添加组件
   spinFontSize = new QSpinBox;//文字大小 SpinBox
   spinFontSize->setMinimum(5);
   spinFontSize->setMaximum(50);
   spinFontSize->setValue(ui->txtEdit->font().pointSize());
   spinFontSize->setMinimumWidth(50);
   ui->mainToolBar->addWidget(new QLabel("字体大小 "));
   ui->mainToolBar->addWidget(spinFontSize); //SpinBox添加到工具栏
   ui->mainToolBar->addSeparator(); //分隔条
   ui->mainToolBar->addWidget(new QLabel(" 字体 "));
   comboFont = new QFontComboBox;
   comboFont->setMinimumWidth(150); 
   ui->mainToolBar->addWidget(comboFont);//添加到工具栏
   setCentralWidget(ui->txtEdit); 
}

iniUI()函数实现如下的功能。

  • 创建一个Qlabel类型的组件fLabCurFile并将其添加到状态栏。
  • 创建一个QProgressBar类型的组件progressBar1并添加到状态栏。
  • 创建QSpinBox 类型组件spinFontSize并设置其属性,然后添加到工具栏。
  • 创建一个QFontComboBox类型的组件并添加到工具栏里。

实现了iniUI()函数之后,在QWMainWind的构造函数里调用iniUI()函数,现在的构造函数代码实现如下:

QWMainWind::QWMainWind(QWidget *parent) :   QMainWindow(parent),
   ui(new Ui::QWMainWind)
{
   ui->setupUi(this);
   iniUI();
}

注意 iniUI()函数一定要在 ui->setupUi(this)之后再调用,两行语句的先后顺序不能调换。因为ui-> setupUi(this)实现了可视化设计的界面的创建,iniUI()是在可视化创建的界面基础之上添加其他组件,所以必须在其后面调用。

现在编译后运行就可以出现如图2-17所示的界面了,界面由可视化设计和代码设计混合实现。