Qt界面问题内容记录

样式表

属性选择器动态切换无效

QLineEdit[urgent=true] 
{
color: red;
}
使用这种方式有局限性。最主要的是当一个属性值变化时,所引用的样式不会自动更新。
相反地,必须手动触发更新才会生效。
unpolish()用于清理之前的样式,而polish()则用于添加新的样式。

lineEdit->setProperty(“urgent”, true);
lineEdit->style()->unpolish(lineEdit);
lineEdit->style()->polish(lineEdit);

必须在组件的样式中使用,QStyle::polish既接受QWidge也接受QApplication作为参数。
QToolBox
  1. QToolBox设置tab高度
QToolBoxButton
{
	min-height: 30px; //控制tab高度
}
  1. 样式类型在这里插入图片描述

  2. 设置文字对齐方式 重写drawItemText

class MyTabStyle: public QProxyStyle
{
    virtual void drawItemText(QPainter* painter, const QRect& rectangle, int alignment,
                          const QPalette& palette, bool enabled, const QString& text,
                          QPalette::ColorRole textRole ) const override
    {
        alignment = Qt::AlignHCenter | Qt::AlignVCenter ;
        QProxyStyle::drawItemText(painter, rectangle, alignment, palette, enabled,text, textRole );
    }
};

QScrollArea

QScrollArea添加布局后没有出现滚动条

QWidget *widget = new QWidget;
widget->setLayout(scrollAreaLayout);

滚动区域的布局不直接设置给滚动区域,创建了一个QWidget,布局中添加控件
之后将这个QWidget设置为滚动区域的QWidget,如下:
scrollArea->setWidget(widget);

同时设置如下属性:
scrollArea->setWidgetResizable(true);

QSPlitter
setStretchFactor(0, 3);	//	设置两个控件的比例为3:1
setStretchFactor(1, 1);

setCollapsible(0, false);	//	设置两个控件拖到最小时不会被隐藏
setCollapsible(0, false);
QWidget
  1. 从QWidget派生了窗体后,使用stylesheet设置背景,在designer中可以看到效果,运行没有背景,因为QWidget的paintEven()是空,而样式表需要通过paint被会知道窗口中。
void CusWidget::paintEvent(QPaintEvent *eveny)
{
	QStyleOption opt;
	opt.init(this);
	QPainter p(this);
	style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
QTextEdit
  1. 当主窗体设置setAttribute(Qt::WA_TranslucentBackground)即背景透明后,如果还想让输入控件(QTextEdit,QLineEdit,QPlainText)背景透明,需要设置控件无边框。
setFrameStyle(QFrame::NoFrame);
QListWidget
  1. 设置样式表无效
setFrameShape(QListWidget::NoFrame);
  1. 设置背景斑马色
setAlternatingRowColors(true);
setStyleSheet("alternate-background-color:rgb(11,231,255);background-color:rgb(222,191,255)");
QTableWidget
  1. 设置水平滚动条平滑滑动,而不是一块一块移动
table_wgt->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
  1. Tablewidget 删除item 需要调用removerow 能将item 一起移除掉,takeitem ,clear ,clearcontext 只能清空item上的文字或控件。
  2. 设置最后一列拉伸铺满
table_wg-t>horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
table_wgt->horizontalHeader()->setStretchLastSection(true);  // 最后一列拉伸铺满
  1. 设置选中时选中整行
table_wgt->setSelectionBehavior(QAbstractItemView::SelectRows);
  1. 设置只能选中一行
table_wgt->setSelectionMode(QAbstractItemView::SingleSelection);
  1. 设置选中item时,item的背景颜色
table_wgt->setStyleSheet("QTableView::item{selection-background-color:rgba(220,220,220,255)}");
  1. 设置不可编辑
table_wgt->setEditTriggers(QAbstractItemView::NoEditTriggers);
QTableView
  1. 重写QAbastractTableModel之后,调用insertrows()函数前要先调用beginInsertRows()函数,调用beginInsertRows()后,Qt会自动调用rowCount()函数,要在rowCount()将行数处理正确,不然insert出来的行无法编辑。
QTreeWidget
  1. 遍历widget
	QTreeWidgetItemIterator item(tree_wgt);
	while(*item)
	{
		(*item)->  ...
		++item;
	}
  1. 设置某一列可编辑或不可编辑
    注意:
    调用 QTreeWidget::closePersistentEditor() 函数可以关闭一个永久编辑器,以便让用户对节点进行编辑。但是,如果节点的 Qt::ItemIsEditable 标志被设置为可编辑,用户仍然可以通过双击或者按下 F2 键来编辑节点,即使你已经调用了 QTreeWidget::closePersistentEditor() 函数。

QObject::connect(treeWidget,SIGNAL(itemDoubleClicked ( QTreeWidgetItem*, int)),
		this,SLOT(openPersistentEditor(QTreeWidgetItem*,int)));
 
QObject::connect(treeWidget,SIGNAL(itemSelectionChanged ()),
		this,SLOT(slotSelectionChanged()));
 
void CMainWindow::openPersistentEditor(QTreeWidgetItem* item,int column)
{
	if( 1 == column  )
	{
		treeWidget->openPersistentEditor(item,column);
		lastOpen = item;
	}
}
void CMainWindow::slotSelectionChanged()
{
	if( NULL!= lastOpen )
	{
		treeWidget->closePersistentEditor(lastOpen,1);
		lastOpen = NULL;
	}
  1. 设置选中不显示虚线框
QTreeview->setFocusPolicy(Qt::NoFocus);	
QComboBox
  1. 大量数据加载速度过慢解决办法
void CusBox::slotBox(QComboBox *combo)
{
	//	QT官方建议
  combo->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLength);
  QListView *view = (QListView *)combo->view();
	//	显示大小相等的项时,设置uniformItemSizes属性为true。
  view->setUniformItemSizes(true);
	//	批量布局
  view->setLayoutMode(QListView::Batched);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值