Qt的一些相关知识
2017-03-08 17:18
337 查看
QString转换成char*
Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换
Qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多的就是Char*类型
在Qt下怎样将QString转char*呢,需要用到QByteArray类,QByteArray类的说明详见Qt帮助文档。
因为char*最后都有一个‘/0’作为结束符,而采用QString::toLatin1()时会在字符串后面加上‘/0’
方法如下:
Qstring str;
char* ch;
QByteArray ba = str.toLatin1();
ch=ba.data();
这样就完成了QString向char*的转化。经测试程序运行时不会出现bug
注意第三行,一定要加上,不可以str.toLatin1().data()这样一部完成,可能会出错。
补充:以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char*就是乱码,采用如下方法解决:
方法1:
添加GBK编码支持:
#include
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
然后改变上面的第三行为:QByteArray ba = str.toLoacl8Bit();
toLoacl8Bit支持中文
方法2:
先将QString转为标准库中的string类型,然后将string转为char*,如下:
std::string str = filename.toStdString();
const char* ch = str.c_str();
---------------------------------------------------------------------------------------------------------------
线程方法必须是静态方法,你如果写在类里,不能是成员函数,需要加static
这意味着你不能在repairFileThread里访问A实例的成员,不过你可以通过参数传递A的实例
A a;
pthread_create(&tid,NULL,A::repairFileThread,a);
.....
void * A::repairFileThread(void *arg)
{
A* a = (A*)arg;
a->xxx...
}
Qt中的线程函数
socket编程中的connect函数与Qt的connect函数发生冲突,解决办法:在使用socket的connect函数是用
::connect(···)
---------------------------------------------------------------------------------------------------------------
Qt下点击按钮弹出另一个窗口
使用dialog.exec()函数,或者添加窗口部件堆栈
创建窗口部件对象(Widget类型)
m_stackedWidget = new QStackedWidget();
添加需要切换的窗口部件
m_stackedWidget->addWidget(m_displayWidget);
m_stackedWidget->addWidget(m_setWidget);
设置当前窗口部件
void MainWidget::showVersionWidget()
{
m_stackedWidget->setCurrentWidget(m_versionWidget);
}
---------------------------------------------------------------------------------------------------------------
QT点击按钮后使按钮不能再次被点击
ui->button->setEnable(false);
-----------------------------------------------------------------------------------------------------------------------------------
按钮,常常被理解为触发一种动作请求或者命令,是与用户进行指令交互的操作。Qt中Button系列根据用途被划分为不同的定义,其实现框架为QAbstractButton提供按钮的通用性功能,此为抽象基类,所以无法进行实例化。用户需要继承定义此类,实现paintEvent,实现具体的展示。常见的Button有QPushButton,QToolButton,QRadioButton及QCheckBox。这种根据用户分为标记(toggle)的与非toggle的。此种模式用到的典型的c++一种抽象继承模式,将Button通用的抽象到QAbstractButton类,其余类继承,并根据自己的特点来实现画图展现的功能。为此我们从最基本的开始
1、QAbstractButton:此为按钮的抽象积累,提供按钮通用的功能。此类不能实例化,所以子类处理交互动作,尤其是如何绘制button。其为可按按钮(push
button)和可检查(checkable)或切换(toggle)标记按钮提供支持。标记按钮的实现有QRadioButton单选按钮和QCheckBox多选框。可按俺就实现有QPushButton和QToolButton。他们都可以是标记切换,只要需要。
按钮都能显示一个可以包含文字text和图标icon的标签label,使用setText设置文本,setIcon设置图标。如果Button是个文本按钮,则包含的ampersand(‘&’)符号可以添加快捷键shoarcut
key。
上述四种实现按钮可同时显示文字和图标。
1.1QAbstractButton可以提供大多数的Button的状态
1)isDown()表示按钮button是否是pressed down按下的
2)isChecked()表示按钮是否被检查或者标记切换的。只有可检查和切换(标记)的按钮可以标记或者取消标记checked
or unchecked
3)
isEnabled()表示按钮是否可以被用户点按
4)setAutoRepeat()设置按钮是否当用户长按按钮可以auto-repeat(自动重复执行),属性autoRepeatDelay和autoRepeatInterval定义了如何重复响应执行
5)
setCheckable()设置按钮是否可切换或者标记的
1.2
QAbstractButton提供如下信号
1)pressed(),当鼠标在button上并点击左键的时候发射。
2)released(),当鼠标左键被释放的时候
3)clicked(bool
checked=false),当鼠标首先按下pressed,然后释放,或者快捷键被触发,或者click()或者animateClick()调用
4) toggled()
当可切换(标记)按钮状态改变时发射
1.3
QAbstractButton抽象的按钮属性
1) autoExclusive:bool
标志自动互斥是否激活enabled。如果是激活的,那么属于同一父窗口的可标记chackabled按钮和他们属于一个互斥按钮组表现一样,只有一个按钮状态是checked标记的。
注意,此属性对于属于按钮组button
group的按钮。默认是false的,对于radio按钮是true的 www.it165.net
bool
autoExclusive()及setAutoExclusive(bool)进行访问与设置
2)autoRepeat:bool标志是否重复点按激活的,默认是关的。如果是激活的时候pressed()/released()/clicked()信号会发射,在限定的interval。
注意:如果按钮被按下是通过快捷键shortcut
key,此属性被激活并且时间是系统定义的,而不是此类定义的,信号正常发射。
autoRepeat()和setAutoRepeat(bool)设置是否自动重复按钮
3) autoRepeatDelay:int
表示自动哦重复的初始延时时间。
用autoRepeatDelay()和setAutoRepeatDelay(int)设置时间,单位ms级的
4) autoRepeatInterval :
int表示自动重复的时间间隔,setAutoRepeatInterval(int)进行设置
5)chekcable:bool
表示button是否可以checkable标记切换,
isCheckable()判断是否可标记,setCheckable(bool)设置
6)checked:bool
表示是否标记,isChecked()获取是否被标记,setChecked(bool)设置标志状态
注意,此属性必须在checkabled的button才能使用,会触发toggled(bool
checked)信号
7)down :bool
表示button是否按下。isDown及setDown(bool)进行设置。
8)icon : QIcon
表示icon是否显示在button按钮上。icon的大小根据GUI类型定义的,但可以通过iconSize属性设置。
QIcon
icon() : void setIcon(const QIcon &icon)
9)text : QString
属性保存按钮上显示的问题。
通过text()获取值,如果为空则返回一个空串。如果字符里面包含ampersand‘&’符号,则shortcut自动会创建。如果显示&字符,则使用‘&&’就可以了。
没有默认字符串,通过setText(const
QString &)设置此值。
1.4
QAbstractButton抽象类提供的常见函数:
1)void
QAbstractButton::animateClick ( int msec = 100 )
[slot],按钮会立即被按下pressed,并且msec时间后释放。如果没有释放继续调用此函数,则会重置释放时间。
所有的信号与click会被发射。如果button是disabled,此函数不工作。
2)void
QAbstractButton::click ()
[slot]执行一次点按操作。所有与点按相关联的信号都会被发射,如果button是checkable,那么按钮的状态会切换toggled。如果按钮为disabled则不工作
3)void
QAbstractButton::toggle () [slot] 切换按钮的状态,会触发toggled(bool
checked)信号
2、QPushButton,是QAbstractButton的实现体。是一个command按钮,点击其执行一些动作或者响应一些问题,常见场景如ok,apply,cancel
yse no help等。
命令按钮常用文本表示他的动作。
按钮最重要的状态是:
是否可用(disabled or
enabled)
标准的push button
或者togglebutton 或者menu button
开启或者关闭(on or
off),仅针对可切换按钮
default还是normal,默认按钮一般会被点击,在一个对话框里使用确定或返回键的时候
auto-repeat自动重复
pressed down 是否被按下
另外一个命令按钮的一个变体是菜单按钮。不仅提供一个命令,当其点击时会弹出一个菜单选项。使用setMenu方法可以将此按钮与弹出菜单选项关联
在一个对话框,按钮可以设置为default
和auto-default按钮。比如当对话框接受焦点的时候其自动获取焦点,可以使用setAutoDefault()设置。
需要注意的是auto-default按钮会占用稍微多一点的空间,及比一个正常按钮宽,用于汇话默认按钮的indicator标记,如果不需要则设置setAutoDefault(false)就可以了
2.1 添加属性:
1)autoDefault:bool
此属性保持命令按钮是否自动默认按钮,即auto
default button
2)default:标志此命令按钮是一个默认按钮。
通过bool
isDefault()获取、setDefault(bool)设置此属性
default和autoDefault属性决定了当用户在一个对话框按enter时发生的事情
如果一个属性被设置了default,则此按钮自动发射pressed信号,除非autoDefault按钮当前获取了焦点,则autoDefault按钮pressed被发射。
如果对话框dialog只有autoDefault按钮没有default按钮,则当前获取焦点的autoDefault按钮发射pressed,或者没有获取焦点的按钮,则下一个焦点连的按钮被发射。
一个对话框只有一个按钮是default默认按钮,此按钮需要额外的空间表示。
默认按钮default行为只在对话框使用。获取焦点的按钮总是可以被点击通过键盘的空格键
3)
flat:bool表示是否显示按钮的border边框
bool
isFlat()获取,setFlat(bool)进行设置。
默认值为false,如果设置为true,大多数情况,此按钮的背景不会绘画出来,除非按钮被点击。
setAutoFillBackground()可以用于保证背景可以使用QPalette::Button
格式刷绘画出来。
2.2 常见函数:
QPushButton::QPushButton
( QWidget * parent = 0 )
QPushButton::QPushButton
( const QString & text, QWidget * parent = 0 )
QPushButton::QPushButton
( const QIcon & icon, const QString & text, QWidget *parent
= 0 )
创建一个命令按钮text用于描述,QIcon用于显示小图标
QMenu * QPushButton::menu
() const
获取与button关联的弹出菜单,如果没有关联菜单返回0
void QPushButton::setMenu
( QMenu * menu )
关联一个菜单到按钮上,这样按钮就形成了菜单按钮
void
QPushButton::showMenu () [slot]
显示与button相互关联的按钮,如果没有则什么都不操作。
此函数知道弹出菜单被关才会返回。
3、QRadioButton:单选按钮
单选按钮提供一个按钮和一个label,label用于显示对应的文本信息。
单选按钮是一种开关按钮,可以切换为on或者off即checked或者unchecked。主要用途用于提供给用户‘one
of
many’选择。如果用户选择另外一个单选按钮,则之前的就被反选了。默认是autoExclusive的,如果是激活的,属于同一个父类的单选按钮只能选中一个,如果需要多个
exclusive互斥选项在同一个父窗口使用,则将他们方知道QButtonGroup内。
不管切换开关都会发射toggle信号发射。
和QPushButton一样,一串文本显示内容,文本加&会自动创建快捷键
设置文本或icon使用抽象类的接口setText及setIcon实现。
4、QCheckBox:复选框,提供一个checkbox和一个文本label
同QRadioButton,是一个开关按钮,可切换状态on或者off,即checked或者unchecked。
一般,此复选框可以enable或者disable但不影响其他复选按钮。但是如果此放置到一个互斥的QButtonGroup里面,则只能选一个复选框。这是有互斥选项的QButtonGroup所限定的属性。
当checkbox复选框是checked标记或者清楚,都会触发stateChangeed信号。可以使用isChecked()去查询复选框按钮是否标记。
除了常用的选中与没选中状态,QCheckBox提供第三种状态即“没有改变”状态。这是很有用的,当你给用户一个既不选择又不反选的复选框。如果使用此状态,设置其属性setTristate(),然后用checkState()去查询当前标记切换的状态。
4.1 tristate:bool
表示此复选框是否是一个tri-state三态复选框
bool isTristate()
setTristate(bool)查看及设置
4.2 常用函数:
Qt::CheckState
QCheckBox::checkState () const
查看复选框的状态,如果不需要tristatus,直接可以用isChecked,其返回boolean值
void
QCheckBox::setCheckState ( Qt::CheckStatestate )
设置当前复选框的状态。如果不需要支持tristate,则可以直接用setChecked(bool)
stateChanged(int
state)信号:当复选框状态改变时。
5、QToolButton:顾名思义,就是工具操作相关的按钮。其是一种快速访问按钮命令或选项。所以通常和QToolBar搭配使用。工具按钮通常不显示文本,而显示图标QIcon。其主要搭配QToolBar上的QAction行为创建和使用的。
一般QToolButton会在QToolBar::addAction时创建,或者已经存在的action添加到QToolBar时创建。当然此按键肯定可以与普通案件一样初始化和使用。
QToolButton支持自动强制显示模式。可以使用setAutoRaise()设置按钮浮动。
QToolButton一个经典用法就是可以选择工具,及此按钮有开关之分,比如绘画图里面使用画笔,选择此按钮可以画东西了。
工具按钮图标设置为QIcon,这就可以区分不同的分辨率,在disabled和active活跃状态。如果按钮的功能不可用,则使用非使能disabled像素,激活的pixmap像素在按钮漂浮的时候显示,因为鼠标在上面。
工具按钮外观和特点可以通过设置按钮风格setToolButtonStyle和设置setIconSize修改。
QToolButton另外一个选择是弹出菜单,弹出菜单可以使用setMenu和setPopupMode()配置不同的可用的按钮携带一个菜单集合。弹出列表可以使用setPopupDelay。
5.1
属性:arrowType,箭头属性,按钮是否显示一个arrow代替正常的icon,默认显示Qt::NoArray
Q::ArrowType指箭头,显示为Qt::NoFocue,
enum Qt::ArrowType
ConstantValue
Qt::NoArrow 0
Qt::UpArrow 1
Qt::DownArrow 2
Qt::LeftArrow 3
Qt::RightArrow 4
表示箭头,setArrowType设置对应箭头显示位置
autoRaise悬浮框,是否变迁。
popupMode:描述弹出菜单属性,
toolButtonStyle:表示按钮文本和图片显示位置
t::ToolButtonIconOnly 0
Only display the icon.
Qt::ToolButtonTextOnly 1
Only display the text.
Qt::ToolButtonTextBesideIcon 2
The text appears beside the icon.
Qt::ToolButtonTextUnderIcon 3
The text appears under the icon.
Qt::ToolButtonFollowStyle 4
Follow the style.
toolButtonS显示文本和图片
t::ToolButtonIconOnly 0
Only display the icon.
Qt::ToolButtonTextOnly 1
Only display the text.
Qt::ToolButtonTextBesideIcon 2
The text appears beside the icon.
Qt::ToolButtonTextUnderIcon 3
The text appears under the icon.
Qt::ToolButtonFollowStyle
4
--------------------------------------------------------------------------------------------------------------------------------------
Qt设置ComboBox下拉子项高度:
QComboBox *box = new QComboBox();
box->setStyleSheet("QComboBox
QAbstractItemView::item{height:20px;}");
box->setView(new QListView());
--------------------------------------------------------------------------------------------------------------------------------------
Qt设置PushButton的底色为透明,且button上的文字左对齐显示
button->setStyleSheet("QPushButton{background-color:transparent;text-align:left;}");
设置button上的字体颜色
QPalette pa;
pa.setColor(QPalette::ButtonText,Qt::white);
button.setPalette(pa);
---------------------------------------------------------------------------------------------------------------------------------------
Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换
Qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多的就是Char*类型
在Qt下怎样将QString转char*呢,需要用到QByteArray类,QByteArray类的说明详见Qt帮助文档。
因为char*最后都有一个‘/0’作为结束符,而采用QString::toLatin1()时会在字符串后面加上‘/0’
方法如下:
Qstring str;
char* ch;
QByteArray ba = str.toLatin1();
ch=ba.data();
这样就完成了QString向char*的转化。经测试程序运行时不会出现bug
注意第三行,一定要加上,不可以str.toLatin1().data()这样一部完成,可能会出错。
补充:以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char*就是乱码,采用如下方法解决:
方法1:
添加GBK编码支持:
#include
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
然后改变上面的第三行为:QByteArray ba = str.toLoacl8Bit();
toLoacl8Bit支持中文
方法2:
先将QString转为标准库中的string类型,然后将string转为char*,如下:
std::string str = filename.toStdString();
const char* ch = str.c_str();
---------------------------------------------------------------------------------------------------------------
线程方法必须是静态方法,你如果写在类里,不能是成员函数,需要加static
这意味着你不能在repairFileThread里访问A实例的成员,不过你可以通过参数传递A的实例
A a;
pthread_create(&tid,NULL,A::repairFileThread,a);
.....
void * A::repairFileThread(void *arg)
{
A* a = (A*)arg;
a->xxx...
}
Qt中的线程函数
socket编程中的connect函数与Qt的connect函数发生冲突,解决办法:在使用socket的connect函数是用
::connect(···)
---------------------------------------------------------------------------------------------------------------
Qt下点击按钮弹出另一个窗口
使用dialog.exec()函数,或者添加窗口部件堆栈
创建窗口部件对象(Widget类型)
m_stackedWidget = new QStackedWidget();
添加需要切换的窗口部件
m_stackedWidget->addWidget(m_displayWidget);
m_stackedWidget->addWidget(m_setWidget);
设置当前窗口部件
void MainWidget::showVersionWidget()
{
m_stackedWidget->setCurrentWidget(m_versionWidget);
}
---------------------------------------------------------------------------------------------------------------
QT点击按钮后使按钮不能再次被点击
ui->button->setEnable(false);
-----------------------------------------------------------------------------------------------------------------------------------
按钮,常常被理解为触发一种动作请求或者命令,是与用户进行指令交互的操作。Qt中Button系列根据用途被划分为不同的定义,其实现框架为QAbstractButton提供按钮的通用性功能,此为抽象基类,所以无法进行实例化。用户需要继承定义此类,实现paintEvent,实现具体的展示。常见的Button有QPushButton,QToolButton,QRadioButton及QCheckBox。这种根据用户分为标记(toggle)的与非toggle的。此种模式用到的典型的c++一种抽象继承模式,将Button通用的抽象到QAbstractButton类,其余类继承,并根据自己的特点来实现画图展现的功能。为此我们从最基本的开始
1、QAbstractButton:此为按钮的抽象积累,提供按钮通用的功能。此类不能实例化,所以子类处理交互动作,尤其是如何绘制button。其为可按按钮(push
button)和可检查(checkable)或切换(toggle)标记按钮提供支持。标记按钮的实现有QRadioButton单选按钮和QCheckBox多选框。可按俺就实现有QPushButton和QToolButton。他们都可以是标记切换,只要需要。
按钮都能显示一个可以包含文字text和图标icon的标签label,使用setText设置文本,setIcon设置图标。如果Button是个文本按钮,则包含的ampersand(‘&’)符号可以添加快捷键shoarcut
key。
上述四种实现按钮可同时显示文字和图标。
1.1QAbstractButton可以提供大多数的Button的状态
1)isDown()表示按钮button是否是pressed down按下的
2)isChecked()表示按钮是否被检查或者标记切换的。只有可检查和切换(标记)的按钮可以标记或者取消标记checked
or unchecked
3)
isEnabled()表示按钮是否可以被用户点按
4)setAutoRepeat()设置按钮是否当用户长按按钮可以auto-repeat(自动重复执行),属性autoRepeatDelay和autoRepeatInterval定义了如何重复响应执行
5)
setCheckable()设置按钮是否可切换或者标记的
1.2
QAbstractButton提供如下信号
1)pressed(),当鼠标在button上并点击左键的时候发射。
2)released(),当鼠标左键被释放的时候
3)clicked(bool
checked=false),当鼠标首先按下pressed,然后释放,或者快捷键被触发,或者click()或者animateClick()调用
4) toggled()
当可切换(标记)按钮状态改变时发射
1.3
QAbstractButton抽象的按钮属性
1) autoExclusive:bool
标志自动互斥是否激活enabled。如果是激活的,那么属于同一父窗口的可标记chackabled按钮和他们属于一个互斥按钮组表现一样,只有一个按钮状态是checked标记的。
注意,此属性对于属于按钮组button
group的按钮。默认是false的,对于radio按钮是true的 www.it165.net
bool
autoExclusive()及setAutoExclusive(bool)进行访问与设置
2)autoRepeat:bool标志是否重复点按激活的,默认是关的。如果是激活的时候pressed()/released()/clicked()信号会发射,在限定的interval。
注意:如果按钮被按下是通过快捷键shortcut
key,此属性被激活并且时间是系统定义的,而不是此类定义的,信号正常发射。
autoRepeat()和setAutoRepeat(bool)设置是否自动重复按钮
3) autoRepeatDelay:int
表示自动哦重复的初始延时时间。
用autoRepeatDelay()和setAutoRepeatDelay(int)设置时间,单位ms级的
4) autoRepeatInterval :
int表示自动重复的时间间隔,setAutoRepeatInterval(int)进行设置
5)chekcable:bool
表示button是否可以checkable标记切换,
isCheckable()判断是否可标记,setCheckable(bool)设置
6)checked:bool
表示是否标记,isChecked()获取是否被标记,setChecked(bool)设置标志状态
注意,此属性必须在checkabled的button才能使用,会触发toggled(bool
checked)信号
7)down :bool
表示button是否按下。isDown及setDown(bool)进行设置。
8)icon : QIcon
表示icon是否显示在button按钮上。icon的大小根据GUI类型定义的,但可以通过iconSize属性设置。
QIcon
icon() : void setIcon(const QIcon &icon)
9)text : QString
属性保存按钮上显示的问题。
通过text()获取值,如果为空则返回一个空串。如果字符里面包含ampersand‘&’符号,则shortcut自动会创建。如果显示&字符,则使用‘&&’就可以了。
没有默认字符串,通过setText(const
QString &)设置此值。
1.4
QAbstractButton抽象类提供的常见函数:
1)void
QAbstractButton::animateClick ( int msec = 100 )
[slot],按钮会立即被按下pressed,并且msec时间后释放。如果没有释放继续调用此函数,则会重置释放时间。
所有的信号与click会被发射。如果button是disabled,此函数不工作。
2)void
QAbstractButton::click ()
[slot]执行一次点按操作。所有与点按相关联的信号都会被发射,如果button是checkable,那么按钮的状态会切换toggled。如果按钮为disabled则不工作
3)void
QAbstractButton::toggle () [slot] 切换按钮的状态,会触发toggled(bool
checked)信号
2、QPushButton,是QAbstractButton的实现体。是一个command按钮,点击其执行一些动作或者响应一些问题,常见场景如ok,apply,cancel
yse no help等。
命令按钮常用文本表示他的动作。
按钮最重要的状态是:
是否可用(disabled or
enabled)
标准的push button
或者togglebutton 或者menu button
开启或者关闭(on or
off),仅针对可切换按钮
default还是normal,默认按钮一般会被点击,在一个对话框里使用确定或返回键的时候
auto-repeat自动重复
pressed down 是否被按下
另外一个命令按钮的一个变体是菜单按钮。不仅提供一个命令,当其点击时会弹出一个菜单选项。使用setMenu方法可以将此按钮与弹出菜单选项关联
在一个对话框,按钮可以设置为default
和auto-default按钮。比如当对话框接受焦点的时候其自动获取焦点,可以使用setAutoDefault()设置。
需要注意的是auto-default按钮会占用稍微多一点的空间,及比一个正常按钮宽,用于汇话默认按钮的indicator标记,如果不需要则设置setAutoDefault(false)就可以了
2.1 添加属性:
1)autoDefault:bool
此属性保持命令按钮是否自动默认按钮,即auto
default button
2)default:标志此命令按钮是一个默认按钮。
通过bool
isDefault()获取、setDefault(bool)设置此属性
default和autoDefault属性决定了当用户在一个对话框按enter时发生的事情
如果一个属性被设置了default,则此按钮自动发射pressed信号,除非autoDefault按钮当前获取了焦点,则autoDefault按钮pressed被发射。
如果对话框dialog只有autoDefault按钮没有default按钮,则当前获取焦点的autoDefault按钮发射pressed,或者没有获取焦点的按钮,则下一个焦点连的按钮被发射。
一个对话框只有一个按钮是default默认按钮,此按钮需要额外的空间表示。
默认按钮default行为只在对话框使用。获取焦点的按钮总是可以被点击通过键盘的空格键
3)
flat:bool表示是否显示按钮的border边框
bool
isFlat()获取,setFlat(bool)进行设置。
默认值为false,如果设置为true,大多数情况,此按钮的背景不会绘画出来,除非按钮被点击。
setAutoFillBackground()可以用于保证背景可以使用QPalette::Button
格式刷绘画出来。
2.2 常见函数:
QPushButton::QPushButton
( QWidget * parent = 0 )
QPushButton::QPushButton
( const QString & text, QWidget * parent = 0 )
QPushButton::QPushButton
( const QIcon & icon, const QString & text, QWidget *parent
= 0 )
创建一个命令按钮text用于描述,QIcon用于显示小图标
QMenu * QPushButton::menu
() const
获取与button关联的弹出菜单,如果没有关联菜单返回0
void QPushButton::setMenu
( QMenu * menu )
关联一个菜单到按钮上,这样按钮就形成了菜单按钮
void
QPushButton::showMenu () [slot]
显示与button相互关联的按钮,如果没有则什么都不操作。
此函数知道弹出菜单被关才会返回。
3、QRadioButton:单选按钮
单选按钮提供一个按钮和一个label,label用于显示对应的文本信息。
单选按钮是一种开关按钮,可以切换为on或者off即checked或者unchecked。主要用途用于提供给用户‘one
of
many’选择。如果用户选择另外一个单选按钮,则之前的就被反选了。默认是autoExclusive的,如果是激活的,属于同一个父类的单选按钮只能选中一个,如果需要多个
exclusive互斥选项在同一个父窗口使用,则将他们方知道QButtonGroup内。
不管切换开关都会发射toggle信号发射。
和QPushButton一样,一串文本显示内容,文本加&会自动创建快捷键
设置文本或icon使用抽象类的接口setText及setIcon实现。
4、QCheckBox:复选框,提供一个checkbox和一个文本label
同QRadioButton,是一个开关按钮,可切换状态on或者off,即checked或者unchecked。
一般,此复选框可以enable或者disable但不影响其他复选按钮。但是如果此放置到一个互斥的QButtonGroup里面,则只能选一个复选框。这是有互斥选项的QButtonGroup所限定的属性。
当checkbox复选框是checked标记或者清楚,都会触发stateChangeed信号。可以使用isChecked()去查询复选框按钮是否标记。
除了常用的选中与没选中状态,QCheckBox提供第三种状态即“没有改变”状态。这是很有用的,当你给用户一个既不选择又不反选的复选框。如果使用此状态,设置其属性setTristate(),然后用checkState()去查询当前标记切换的状态。
4.1 tristate:bool
表示此复选框是否是一个tri-state三态复选框
bool isTristate()
setTristate(bool)查看及设置
4.2 常用函数:
Qt::CheckState
QCheckBox::checkState () const
查看复选框的状态,如果不需要tristatus,直接可以用isChecked,其返回boolean值
void
QCheckBox::setCheckState ( Qt::CheckStatestate )
设置当前复选框的状态。如果不需要支持tristate,则可以直接用setChecked(bool)
stateChanged(int
state)信号:当复选框状态改变时。
5、QToolButton:顾名思义,就是工具操作相关的按钮。其是一种快速访问按钮命令或选项。所以通常和QToolBar搭配使用。工具按钮通常不显示文本,而显示图标QIcon。其主要搭配QToolBar上的QAction行为创建和使用的。
一般QToolButton会在QToolBar::addAction时创建,或者已经存在的action添加到QToolBar时创建。当然此按键肯定可以与普通案件一样初始化和使用。
QToolButton支持自动强制显示模式。可以使用setAutoRaise()设置按钮浮动。
QToolButton一个经典用法就是可以选择工具,及此按钮有开关之分,比如绘画图里面使用画笔,选择此按钮可以画东西了。
工具按钮图标设置为QIcon,这就可以区分不同的分辨率,在disabled和active活跃状态。如果按钮的功能不可用,则使用非使能disabled像素,激活的pixmap像素在按钮漂浮的时候显示,因为鼠标在上面。
工具按钮外观和特点可以通过设置按钮风格setToolButtonStyle和设置setIconSize修改。
QToolButton另外一个选择是弹出菜单,弹出菜单可以使用setMenu和setPopupMode()配置不同的可用的按钮携带一个菜单集合。弹出列表可以使用setPopupDelay。
5.1
属性:arrowType,箭头属性,按钮是否显示一个arrow代替正常的icon,默认显示Qt::NoArray
Q::ArrowType指箭头,显示为Qt::NoFocue,
enum Qt::ArrowType
ConstantValue
Qt::NoArrow 0
Qt::UpArrow 1
Qt::DownArrow 2
Qt::LeftArrow 3
Qt::RightArrow 4
表示箭头,setArrowType设置对应箭头显示位置
autoRaise悬浮框,是否变迁。
popupMode:描述弹出菜单属性,
toolButtonStyle:表示按钮文本和图片显示位置
t::ToolButtonIconOnly 0
Only display the icon.
Qt::ToolButtonTextOnly 1
Only display the text.
Qt::ToolButtonTextBesideIcon 2
The text appears beside the icon.
Qt::ToolButtonTextUnderIcon 3
The text appears under the icon.
Qt::ToolButtonFollowStyle 4
Follow the style.
toolButtonS显示文本和图片
t::ToolButtonIconOnly 0
Only display the icon.
Qt::ToolButtonTextOnly 1
Only display the text.
Qt::ToolButtonTextBesideIcon 2
The text appears beside the icon.
Qt::ToolButtonTextUnderIcon 3
The text appears under the icon.
Qt::ToolButtonFollowStyle
4
--------------------------------------------------------------------------------------------------------------------------------------
Qt设置ComboBox下拉子项高度:
QComboBox *box = new QComboBox();
box->setStyleSheet("QComboBox
QAbstractItemView::item{height:20px;}");
box->setView(new QListView());
--------------------------------------------------------------------------------------------------------------------------------------
Qt设置PushButton的底色为透明,且button上的文字左对齐显示
button->setStyleSheet("QPushButton{background-color:transparent;text-align:left;}");
设置button上的字体颜色
QPalette pa;
pa.setColor(QPalette::ButtonText,Qt::white);
button.setPalette(pa);
---------------------------------------------------------------------------------------------------------------------------------------
相关文章推荐
- DNS的一些相关基础知识
- 关于WININET的异步使用的代码和一些相关知识
- 内存相关的一些知识
- QT的一些相关网站
- SNMP口令的利用以及一些相关知识
- 信贷基本词汇英汉对照[突然发现写软件也要被迫学企业管理的一些相关知识....]
- [转]Preference Page和PropertyPage的一些相关知识.
- 与灰度值相关的一些知识
- SNMP口令的利用以及一些相关知识
- 与 “关闭窗体” 相关的一些零散知识
- php及wml的一些相关知识
- 位图的一些相关知识
- DNS的一些相关基础知识
- Java入门--一些JAVA相关的基础知识
- [转载]关于Clusters的一些相关知识和名词解释
- 一些C#相关知识整理
- 关于就医的一些相关知识
- SNMP口令的利用以及一些相关知识
- postfix 的相关一些知识
- 关于手机UI和QT实现的一些基本知识