- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
问题是:
客户面板派生自 QTabWidget 并且有一些带有一些小部件的标签
运算符(operator)(人)可以在其中编辑数据。当任何小部件中的数据发生更改时
我检查了它,并在 QLabel 中设置了粗体字体,这是这个小部件的“伙伴”。我通过设置来做到这一点:
QFont fontBold; fontBold.setBold(true);
widget->setFont(fontBold)
到目前为止一切顺利。
接下来,我希望有选项卡,其中有修改和未保存的数据也用粗体标记。即使当用户切换到其他选项卡并留下未保存的数据时,此选项卡仍应以粗体标记,直到他返回并保存数据。
这就是问题所在。
如果我为小部件或 QTabBar 设置 setFont - 所有文本或所有选项卡都被标记粗体。
在派生自 QTabWidget 的类中,我有:
QTabBar *tabBar() const { return QTabWidget::tabBar(); }
所以我可以访问 tabBar,例如使用 setTabTextColor - 用不同的颜色标记这个选项卡 - 这是某种解决方案,但其他“伙伴”标签用粗体标记,所以 tabText 应该是粗体。
如果我使用setStyleSheet我可以制作粗体,但也有一个问题:
this->tabBar()->setStyleSheet("QTabBar::tab { font:bold }");
这会将所有选项卡设置为粗体文本,如果我使用像 active 这样的伪状态,已选择等 - 当用户切换到其他选项卡时它会发生变化,我需要将此选项卡保持为粗体直到数据被保存。
我可以使用 setProperty,然后为具有特定属性的小部件制作 styleSheet,但真正的问题是,我不能,或者不知道如何访问 QTabBar 中的一个选项卡(例如,通过知道它的索引号)
我已经看到,在 QT3 中有 QTab* QTabBar::tab(int) 可以访问特定的选项卡,但这不再可用。我读了http://qt.nokia.com/doc/4.5/stylesheet-examples.html和 http://qt.nokia.com/doc/4.5/stylesheet-reference.html我没有找到解决方案。
如何访问 QTabBar 中的特定选项卡(通过其索引号)或如何为特定选项卡设置 font:bold 和 styleSheet 以在用户切换到其他选项卡时保留粗体?
提前致谢。
最佳答案
要执行此任务,我们必须覆盖 paintEvent()
方法以创建一个继承 QTabBar
的类。
class TabBar: public QTabBar{
QVector<int> mUnSaved;
public:
void setUnsaved(int index){
if(index >= count() || index < 0)
return;
mUnSaved << index;
update();
}
void setSaved(int index){
if(!mUnSaved.contains(index))
return;
mUnSaved.remove(mUnSaved.indexOf(index));
update();
}
protected:
void paintEvent(QPaintEvent */*event*/){
QStylePainter painter(this);
QStyleOptionTab opt;
for(int i = 0;i < count();i++)
{
initStyleOption(&opt,i);
painter.save();
if(mUnSaved.contains(i)){
painter.setFont(QFont("Times", 10, QFont::Bold));
}
painter.drawControl(QStyle::CE_TabBarTabShape, opt);
painter.drawControl(QStyle::CE_TabBarTabLabel,opt);
painter.restore();
}
}
};
然后我们在下面的例子中使用它
class TabWidget : public QTabWidget
{
TabBar *mTabBar;
public:
TabWidget(QWidget *parent=0):QTabWidget(parent){
mTabBar = new TabBar;
setTabBar(mTabBar);
for(int i=0; i < 5; i++){
QString text = QString("Tab %1").arg(i);
addTab(new QLabel(text, this), text);
}
mTabBar->setUnsaved(1);
mTabBar->setUnsaved(3);
mTabBar->setUnsaved(4);
mTabBar->setSaved(3);
mTabBar->setSaved(10);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setStyle("fusion");
TabWidget w;
w.show();
return a.exec();
}
输出:
完整的例子可以在下面的link中找到
关于c++ - 如何自定义 QTabWidget 选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47094871/
给定一个 Option[Future[Option[Int]]] : scala> val x: Option[Future[Option[Int]]] = Some ( Future ( Some
如果我理解正确,EitherT[Option,A,B] 应该与 Option[Either[A,B]] 相同,但编译器不同意.以下代码编译失败: def f[A,B] = implicitly[Eit
我刚开始在使用 parcel.js 构建静态 Assets 时遇到此错误。它在本地工作,但我在 Heroku 上的构建出错,我不确定它是否相关。 最佳答案 得到同样的问题。通过将 core-js 安装
当我生成 Telerik Report 时,只有 Export PDF 可用。即使我将 docx 和 xlsx 的配置设置为 true。这是我在网络配置中的配置。
我的 iTunesConnect 应用程序显示 Apple Pay 选项。我正在使用布伦特里。 即使我们没有在应用程序中使用 Apple Pay 功能。 有人可以帮我解决如何在我的 itunesCon
我正在 Raspbian 中从命令行运行以下查询: mysql -u $NAME -p $PASS Tweets -e "SELECT count(*) FROM raw_tweets;" 它输出以下
我正在尝试使用 ffmpeg(在 linux 下)为视频添加一个小标题。所以,我使用: ffmpeg -i hk.avi -r 30000/1001 -metadata title="SOF" hk_
我正在尝试使用 ffmpeg 使用 ffserver 流式传输视频。您将在 ffserver1.conf 文件下方找到 ffmpeg 命令的日志输出。 其中一个错误引用了预设,每次我尝试使用预设时,我
我正在尝试对 Option 使用 fold 或 map 操作而不是 match。 我有一个选项 val ao: Option[String] = xxxx 和一个函数 f: (String => Fu
Dockerfile documentation表示有可能通过 --platform FROM 中的选项像这样的指令: FROM [--platform=] [AS ] 在我的 dockerfile
我不确定“属性(property)”或“选项”是否是正确的术语,但这是我需要弄清楚的。 鉴于以下情况: ' $.fileup({ url: '/file/upload',
我正在尝试使用 jQuery 检查是否选择了值 = 1 的选择选项,然后将类添加到某些元素。但有些东西不起作用。可以请人看一下代码吗? 我的代码: Reservation
我对 VIM 中的这些感到困惑。有些事情需要设置,而另一些则让。 而且,我如何检查某个选项。我知道这是一个选项,因为我使用 set 来更改它。 例如,如何检查当前文件类型选项是否为 java? 最佳答
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我在看《Professional F# 2.0》一书作者展示如下代码 let a string : option = None if a.IsNone then System.Console.
我习惯使用方法顶部的 java 样板检查输入参数: public static Boolean filesExist(String file1, String file2, String file3
假设我有一串 "Insert Post -title Some PostTitle -category 2 -date-posted 2013-02:02 10:10:10" 我一直在尝试做的是将这个
从 1.3.70 EAP 开始,在 org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions 这是 var useIR: kotlin.Boolean 哪个激活
我无法获取订购捆绑商品的所有子产品及其选项。这可能吗? 最佳答案 以下是您如何找出哪些产品应与所有其他项目一起附加到列表中的捆绑产品中的方法: foreach ($order->getAllItems
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我是一名优秀的程序员,十分优秀!