• 15697阅读
  • 22回复

[提问]qtoolbar中qaction对齐 [复制链接]

上一主题 下一主题
离线starrylight
 

只看楼主 倒序阅读 楼主  发表于: 2011-09-23
创建了一个qtoolbar,然后添加了N个qaction,并且设置qtoolbar,setOrientation( Qt::Vertical );即垂直显示,可是编译出来,qaction都是垂直居中,怎么样才能让它左对齐或者右对齐啊,
离线jdwx

只看该作者 1楼 发表于: 2011-09-23
回 楼主(starrylight) 的帖子
本身QToolBar就是一排带图标的按钮,除非你的图标或者文字不一样大。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线wxj120bw

只看该作者 2楼 发表于: 2011-09-24
回 楼主(starrylight) 的帖子
看下QLayout手册
离线starrylight

只看该作者 3楼 发表于: 2011-09-24
回 1楼(jdwx) 的帖子
几个action的名字长度是不一样的,都是居中显示,所以看起来很不整齐,有什么办法能让它们左对齐不
离线starrylight

只看该作者 4楼 发表于: 2011-09-24
回 2楼(wxj120bw) 的帖子
布局里有这种函数?
离线wxj120bw

只看该作者 5楼 发表于: 2011-09-24
回 4楼(starrylight) 的帖子
除了QToolBar的layout函数(QLayout的setAlignment函数) 还有widgetForAction()函数
离线jdwx

只看该作者 6楼 发表于: 2011-09-24
回 3楼(starrylight) 的帖子
精简一下文字,尽可能一样长。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线starrylight

只看该作者 7楼 发表于: 2011-09-26
回 5楼(wxj120bw) 的帖子
谢啦,按照你的思路我觉得应该是对的,可是编译过了但是运行不起来,挺奇怪的。。。
离线starrylight

只看该作者 8楼 发表于: 2011-09-26
回 6楼(jdwx) 的帖子
文字一样长也是居中的,我希望的是左对齐~
离线jdwx

只看该作者 9楼 发表于: 2011-09-26
回 8楼(starrylight) 的帖子
没发现有什么办法设置左对齐,还是那个办法,编辑文本在文本中间加空格,使文本和图标一样宽,
看着就是对齐了,QToolBar有一个小BUG就是文字(中文)在图标下面的时候,文字的上部显示不全,就是大家说的(剃头)。
关于运行不起来的那个问题,只要删除编译的那个目录,重新编译一次就好了。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线wxj120bw

只看该作者 10楼 发表于: 2011-09-26
回 7楼(starrylight) 的帖子
可以实现左(右)对齐 我自己实现过 关于不能运行的问题 先尝试楼上的方法吧
离线jdwx

只看该作者 11楼 发表于: 2011-09-27
回 楼主(starrylight) 的帖子
有一个最后的办法,编辑图标,把文字加进去,就什么问题都没有了。就是翻译的时候有问题。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线starrylight

只看该作者 12楼 发表于: 2011-09-27
回 10楼(wxj120bw) 的帖子
删除了编译文件重新编译了,还是编译过了运行不起来,可能这段代码放在我这个程序里,哪里的逻辑有问题
离线starrylight

只看该作者 13楼 发表于: 2011-09-27
回 11楼(jdwx) 的帖子
这样弄了看起来应该是齐的,可是我不能改qaction,因为这个qaction还要加在别的菜单里,不仅仅是在工具栏里,所以我要让这个工具栏看起来整齐,好像只有实现左(右)对齐了~
离线wxj120bw

只看该作者 14楼 发表于: 2011-09-27
回 12楼(starrylight) 的帖子
尝试下调式跟踪 在那个语句出错了
离线starrylight

只看该作者 15楼 发表于: 2011-09-29
回 14楼(wxj120bw) 的帖子
我再试试吧,对这个实现无语的都想放弃了~谢谢!
离线wxj120bw

只看该作者 16楼 发表于: 2011-09-29
回 15楼(starrylight) 的帖子
如果还不行 晚上发出来 让大家帮你看看
离线jdwx

只看该作者 17楼 发表于: 2011-09-29
也不知道你要做什么样的界面,QToolBar确实不是好选择,除了能浮动,如果不用浮动和停靠(估计你用不到),完全可以自己做一个,
用一个QWidget里面装两个QLabel(一个显示图片,一个显示文字,根据需要布局)为一个按钮,自己写几个事件和信号。
用一个QWidget做工具栏,把“自己做的按钮”放到这个widget的布局里。可以随便控制外观。
菜单里还用QAction。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线starrylight

只看该作者 18楼 发表于: 2011-09-29
回 16楼(wxj120bw) 的帖子
程序太大啦,不太好发。。。头疼
离线starrylight

只看该作者 19楼 发表于: 2011-09-29
回 17楼(jdwx) 的帖子
这个理解下来应该可行,但是我的程序很大,这样修改的话,不太好改,还是谢啦~
离线wxj120bw

只看该作者 20楼 发表于: 2011-09-29
回 18楼(starrylight) 的帖子
晚上 我将我写的代码发给你看看 看是不是新添加代码导致的
离线wxj120bw

只看该作者 21楼 发表于: 2011-09-29
回 18楼(starrylight) 的帖子
大致如下 看有没有帮助 不行再说
  1.     QToolBar *toolbar = this->addToolBar("1111");
  2.     toolbar->setOrientation(Qt::Vertical);
  3.     toolbar->addAction("help");
  4.     toolbar->addAction("1111111111111");
  5.     QList<QAction*> actionList = toolbar->actions();
  6.     QAction *action = NULL;
  7.     QWidget *actionWidget = NULL;
  8.     QLayout *layout = toolbar->layout();
  9.     for(int i = 0; i < actionList.size(); i++) {
  10.         action = actionList.at(i);
  11.         actionWidget = toolbar->widgetForAction(action);
  12.         if(actionWidget == NULL) {
  13.             continue;
  14.         }
  15.         layout->setAlignment(actionWidget, Qt::AlignLeft);
  16.     }
离线starrylight

只看该作者 22楼 发表于: 2011-09-30
回 21楼(wxj120bw) 的帖子
看了你的代码,我发现我有个参数错了,
你的是QLayout *layout = toolbar->layout();
我写成了QLayout *layout = actionWidget->layout();
是我当时写代码的时候,没理解好函数之间的关系,虽然现在也不是特别理解。。。。
现在编译运行出来啦,谢谢你哈,
快速回复
限100 字节
 
上一个 下一个