Qt使用的积累

1.想得到qstring所占空间的长度:(一般在paintEvent(QPaintEvent *e)函数体中)<:`

:>QFontMetrics ft = p.fontMetrics(); 
QString name = ”一个字符串”; 
int width=ft.width(name);//width是字符串name所占的像素个数<-

2.设置一个cpp文件中QT部件的样式:(多个部件一起设)

>:setStyleSheet( 
"QListWidget::item{border: 1px solid #dadada;}" 
"QListWidget::item:selected{background:1px solid #b3e5fc;outline:0px;}" 
"QCheckBox{font-family:'Microsoft YaHei'; font-size:12px;}" 
"QGroupBox{font-family:'Microsoft YaHei';font-size:12px;color:#000000;}" 
"QRadioButton{font-family:'Microsoft YaHei'; font-size:12px;}" 
);<-

3.给一个QComboBox设置成自己想要的样式:(主要就是难点是设置下拉列表每一项的height)

(1). 有icon的样式: 
>:QCombox combox; 
combox.addItem(QString::fromLocal8Bit(“中英文都可以的字符串1”)); 
combox.addItem(QString::fromLocal8Bit(“中英文都可以的字符串2”));//给combox下拉列表设置为两行 
combox.setItemIcon(0,QIcon(":/gui/art/iframe/meeting.png"));//从0开始 
combox.setItemIcon(1, QIcon(":/gui/art/iframe/phone.png"));//分别设置icon 
combox.setIconSize(QSize(25, 25));//设置icon大小使下拉列表每行height都一样 
combox.setStyleSheet( 
"QComboBox{border:1px solid gray;}" 
"QComboBox{border-radius: 0px;}" 
"QComboBox{background:qlineargradient(x1:0,y1:0,x2:2,y2:2,stop:0.4 #ffffff);}" 
"QComboBox{width:180px;}" 
"QComboBox{top:1px;left:1px;}" 
"QComboBox::drop-down{border-style:none;}" 
"QComboBox::down-arrow{image:url(:/gui/art/iframe/dropicon.png);}"//自定义向下箭头 
);<-
 
(2). 没有icon的样式设置,只是把下拉列表每一项height设大:(设置(1,25)的icon) 
>:QCombox combox; 
QPixmap pixmap(1, 25); 
Pixmap.fill(Qt::transparent); 
QIcon icon(pixmap); 
combox.setIconSize(QSize(1, 25)); 
combox.setItemIcon(i, icon);<-

4.给某一个部件设置字体:

setFont(QFont(“Microsoft YaHei”,12,QFont::Normal));

5.堆栈窗口的实现(左侧是QListWidget,右侧是一叠QWidget):

QListWidget m_pList = new QListWidget;

>:QListWidgetItem* firstItem = new QListWidgetItem(QIcon(“:/gui/art/iframe/settings.png”),qsl(“列表第一项”),m_pList);
QListWidgetItem* secondItem = new QListWidgetItem(QIcon(“:/gui/art/iframe/settings.png”),qsl(“列表第二项”),m_pList);<-

>:firstItem->setSizeHint(QSize(100,50));//设置每项大小 
secondItem->setSizeHint(QSize(100,50));<-

>:m_pList->setIconSize(QSize(40,40));//设置每一项中图标大小 
m_pList->setSpacing(5);//设置列表项之间的间隔 
m_pList->setFocusPolicy(Qt::NoFocus);//去掉选中效果(虚线框)<-

m_pList->insertItem(0, firstItem);//把每一项插入QListWidget 
m_pList->insertItem(1, secondItem);
 
/// 
以上是左侧列表的实现,以下是右侧堆栈窗口的实现: 
QStackedWidget stackWidget = new QStackedWidget(this); 
QWidget widget1 = new QWidget(this); 
QWidget widget2 = new QWidget(this);

stackWidget->addWidget(widget1);//给堆栈窗口分别设置widget 
stackWidget->addWidget(widget2);
 
// 
//布局(设置QListWidget与QStackedWidget的位置) 
QHBoxLayout *layout = new QHBoxLayout(this); 
layout->addWidget(m_pList); 
layout->addWidget(stackWidget); 
layout->setMargin(0); 
layout->setSpacing(0); 
layout->setStretchFactor(m_pList, 1); 
layout->setStretchFactor(stackWidget, 3);//左右布局1:3
 
//下面这句使左侧列表与右侧堆栈窗口一一对应起来 
connect(m_pList, SIGNAL(currentRowChanged(int)), stackWidget, SLOT(setCurrentIndex(int))); 
//OVER!!!

6.设置菜单的位置:

QPoint pos; 
QMenu menu = new QMenu(this); 
int x=pos.x(); 
int y=pos.y(); 
pos.setX(x); 
pos.setY(y + this->geometry().height() + 1); 
menu->exec(mapToGlobal(pos));

7.设置菜单的样式:

setStyleSheet( 
"QMenu{padding:0px;background:#ffffff;color:#000000;}" 
"QMenu::item:selected{background-color:#aedcf6;color:#000000;}" 
"QMenu::item{padding:10px 0px 10px 20px;font-size:14px;}" 
"QMenu::item{border-bottom:1px solid #eeeef4;}" 
);

8.在使用QRadioButton的时候需要注意的问题,在同一个widget中只能有一个radioButton->ischecked()为真,所以需要对QRadioButton分组。一般是通过QGroupBox对radioButton分组,但是这种方法会产生一个方框把radioButton给框起来了,看到网上的一种方法是每组radioButton分别有一个父窗口QWidget. 下面是通过QGroupBox分组的例子:

>:radioButton1 = new QRadioButton(“”, parentGroupBox1); 
radioButton2 = new QRadioButton(“”, parentGroupBox2);<-

9.如果想修改图片的格式,直接修改扩展名是不行的,文件可能被破坏。需要用修图软件打开并另存为需要的格式。切记!
10.想要实现窗口的拖动操作实现如下:

void QSLabel::mouseMoveEvent(QMouseEvent *e) 

if(e->buttons()&&Qt::LeftButton) 

move(e->globalPos() - dragPosition); 
e->accept(); 


void QSLabel::mousePressEvent(QMouseEvent* e ) 

if(e->button()==Qt::LeftButton) 

dragPosition=e->globalPos() - frameGeometry().topLeft(); 
e->accept(); 

}

11.实现QT原生部件的背景透明。(以QTextEdit为例)

>:QTextEdit *m_textEdit=new QTextEdit(this); 
QPalette pl=m_textEdit->palette(); 
pl.setBrush(QPalette::Base,QBrush(QColor(255,0,0,0))); 
m_textEdit->setPalette(pl);<-

12.使QTextEdit中显示的文字自动换行类似于方形:

>:m_textEdit->resize(sqrt(m_textEdit->toPlainText().size())*15+30,m_textEdit->document()->size().rheight()+10);<-

13.要将一段文字绘制在一个矩形区域内部的做法:(KEY:Qt::TextWrapAnywhere)

p.drawText(rect, Qt::TextWrapAnywhere, string);

14.要使窗口半透明可以在paintEvent(QPaintEvent *e)方法中调用

p.setOpacity(float/*透明度*/);

15.QT中设置应用的风格:

QApplication::setStyle(“windowxp”);//XP风格,(体现在QT原生部件的显示上) 
可以是“windows”、“motif”、“cde”、“plastique”、“windowsxp”、“macintosh”。

16.设置QLabel样式:

Label->setText("<b><font color=blue size=30>test!</font></b>");//修改文字颜色及大小 
Label->setPixmap(QPixmap(“:res/logo_png”));//显示图片 
Label->setScaledContents(true);//图片适应label大小(在显示图片前调用) 
Label->setWordWrap(true);//文字自动换行 
Label->setAlignment(Qt::AlignLeft);//设置字体靠左 
Label->setTextInteractionFlags(Qt::TextSelectableByMouse);//设置文本内容可选

17.制作程序启动页面:

#include <QtGui/QApplication> 
#include <QSplashScreen> 
#include <QTimer> 
#include "mainwindow.h" 
int main(int argc, char *argv[]) 
{

    QApplication a(argc, argv);
    MainWindow w;

    QPixmap pixmap(":res/bg");
    QSplashScreen splash(pixmap);
    splash.show();

    QTimer::singleShot(1500, &splash, SLOT(hide()));
    QTimer::singleShot(2000, &w, SLOT(show()));

    return a.exec();
}`

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
18.设置快捷键:

QAction *hotkey=new QAction(this); 
Hotkey->setShortCut(QKeySequence(Qt::CTRL=Qt::Key_F)); 
App::wnd()->addAction(hotkey); 
Connect(hotkey,SIGNAL(triggered()),btn,SIGNAL(clicked()));//等同于点击btn的clicked()信号。

19.去除窗口的最大最小化按钮:
    setWindowFlags(windowFlags()&~Qt::WindowMaximizeButtonHint&~Qt::WindowMinimizeButtonHint);

 
 
  • 1
  • 2
20.调用QMessageBox的时候,主程序在托盘运行,点击这个对话框上的取消按钮,或是直接点击关闭,整个程序就退出了。

解决方法是在QMessageBox弹出前加一句:(最好是给main()里面添加,这样只需要加一次就可以了) 
QApplication::setQuitOnLastWindowClosed(false);

21.给列表项添加右键菜单:

void ConversationList::mousePressEvent(QMouseEvent *e) { 
_mouseSel = true; 
_lastMousePos = e->globalPos(); 
If(e->button() == Qt::MouseButton::RightButton ) 

QMenu popMenu; 
m_act = popMenu.addAction(qsl(“ 删除这一项”)); 
popMenu.setFixedSize(st::meetingListMenuSize); 
popMenu.setFont(QFont(“Microsoft YaHei”, 11, QFont::Normal)); 
popMenu.setCursor(Qt::PointinghandCursor); 
popMenu.setStyleSheet( 
"QMenu{padding:0px;background:#ffffff;color:#000000;border:0px solid gray;}" 
"QMenu::item:selected{background-color:#f5f5f5;color:#000000;}"); 
if(m_act == popMenu.exec(_lastMousePos)) { 
emit clickDelDialog(gldId); 


}

转载地址:http://blog.csdn.net/u011915578/article/details/46490885

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值