• 11188阅读
  • 7回复

如何获取当前光标所在控件? [复制链接]

上一主题 下一主题
离线myue_23
 
只看楼主 倒序阅读 楼主  发表于: 2009-08-29
QMainWindow上有很多控件 比如QTextEdit、QLineEdit等
如何实现copy、paste等功能呢?这些在功能不是上下文菜单里的,是在menu_Edit里
[ 此帖被myue_23在2009-08-29 16:55重新编辑 ]
离线myue_23
只看该作者 1楼 发表于: 2009-08-29
没人回答呢。。。
离线dbzhang800

只看该作者 2楼 发表于: 2009-08-29
猜测一样,主要是你的问题别人不知道该怎么回答吧。

按你描述
QMainWindow上有很多控件 比如QTextEdit、QLineEdit等
如何实现copy、paste等功能呢?这些在功能不是上下文菜单里的,是在menu_Edit里


很难判断你要实现什么功能。 一般来说,都是一个SDI或MDI的编辑器程序,选中其中的文本,菜单栏中的编辑菜单中有剪切复制粘贴等,这样的例子demo就有好几个。

而你要判断光标的位置,来实现复制功能? 你决定这么你想要的么?如果确定的话,你所谓的光标是指edit中的插入点的那条竖线么?如果是这样的话,或许你需要的是:判断哪个文本框拥有焦点。(而一个问题我不敢确定,当你鼠标移动到菜单上后,焦点应该转移了吧,你确定鼠标点菜单的时候你的文件框有焦点(或者说那条竖线)?)
离线myue_23
只看该作者 3楼 发表于: 2009-08-30
例如有A和B两个textEdit  和一个lineEdit 和一个ComboBox。
void CRecordManager::doPaste()
{
    AtextEdit->paste();
}
这样每次点击“粘贴”的时候,都是在AtextEdit里粘贴,我想光标在哪就在那粘贴(光标在BtextEdit或lineEdit或ComboBox上对应粘贴)。这个如何实现啊 谢谢
离线dbzhang800

只看该作者 4楼 发表于: 2009-08-30
在 你的菜单槽函数中,通过QWidget * QApplication::focusWidget ()   [static] 可以获得当前拥有焦点的widget,

然后和你的那几个可能有焦点的widget逐一比对应该就可以了
  1.    QWidget * fWidget = qApp->focusWidget();
  2.    if (lineEdit1 == qobject_cast<QLineEdit *>(fWidget ))
  3.     {
  4.               //lineEdit1
  5.     }
  6.     else if(lineEdit2 == qobject_cast<QLineEdit *>(fWidget ))
  7.     {
  8.               //lineEdit2
  9.     }
  10.     else if(lineEdit3 == qobject_cast<QLineEdit *>(fWidget ))
  11.     {
  12.              //lineEdit3
  13.     }
  14.     else if(textEdit == qobject_cast<QTextEdit *>(fWidget ))
  15.     {
  16.              //textEdit
  17.     }
离线myue_23
只看该作者 5楼 发表于: 2009-08-30
谢谢楼上的。lineEdit和textEdit是AtextEdit->paste() AlineEdit->copy();     QComboBox的呢?没看到它的相关函数,请赐教。
离线dbzhang800

只看该作者 6楼 发表于: 2009-08-30
QComboBox 本身不就包含一个QLineEdit 么??


QLineEdit * lineEdit () const
离线myue_23
只看该作者 7楼 发表于: 2009-08-30
恩 已经查到这个了 呵呵 谢谢
快速回复
限100 字节
 
上一个 下一个