I have a CMFCTabCtrl in my dialog and my CMFCTabCTrl has two tabs.
The first tab has a CComboBox and the second tab also has a CComboBox.
Whatever item newly added in ComboBox in first tab will reflect in ComboBox in second tab. Similarly, whatever item newly added in ComboBox in second tab will reflect in ComboBox in first tab.
For this, I have all ComboBox items in a vector and in each dialog's WM_SETFOCUS event I am adding items to ComboBox.
When user typing something in ComboBox but then user selects another control or dialog/tab also I am adding that item to ComboBox. For that I am tracking CBN_KILLFOCUS in parent's dialog OnCommand and adding the item to ComboBox.
Now my problem is when user type something in ComboBox and clicking on second tab, the SetFocus of second tab is called first and then only OnCommand with CBN_KILLFOCUS() message is getting called. So the second tab is not having newly added item by the first tab whereas the first tab is having that item.
How to make the ComboBox item available to the second tab before it is getting displayed.
If I do necessary operation(whatever operation I am doing on killfocus) on AFX_WM_CHANGING_ACTIVE_TAB, I am able to achieve my requirement.
Related
I have 4 radio buttons on my dialog and all are under one group.
In order to group them i have set the group option to TRUE for the first radio button and FALSE for the rest of them.
I have given the tab order accordingly.
As i grouped them together, i can only create one member variable for the entire group lets say it is m_RadioGroup.
I have "Ok" button on my dialog. Now on click of OK button i wanted to know which radio button is selected out of 4 of them.
How do we achieve this?
You can't use only 1 variable for 4 item.
Every item should have its own variable. Then witch a switch-case or something else find the radio button selected.
Given a QTreeView I would like to provide the user a means of inserting new items. For this I created a QMenuBar that contains several categorizing sub menus that in turn contain the different kinds of items the user can insert.
My first implementation was to select some existing item in the tree and then pick a menu item which is then inserted as a child of the selected item in the tree. There were buttons for rearranging the items, such as 'move up', 'move down' and so on. Later I replaced these buttons by a drag&drop interface where the user can simply drag items in the QTreeView around to rearrange them, which seems quite intuitive to me.
Now inserting new items into the tree by clicking menu items still feels annoying. In my opinion a more natural approach would be to drag the items out of the menu and into the desired location of the tree.
So is there a sensible way to implement this behaviour? My problem is how to start a drag operation by clicking a menu item as the triggered() signal is just emitted when the user releases the mouse button. But with the mouse button released, there is no drag anymore...
I created a Combobox with CreateWindowEx. Everything goes well. But I would like to make a final feature: AutoSuggestion. The Combobox is used to do search text in a document, hence at some point, it have items that are the strings a user searched. The AutoSuggestion should be: drop down the list of items, find those items that begin with the string that a user typed in the edit control, but do not select one of them, do not display all other items, and finally do not change select item when keydown or keyup occurs, only highlight the item and select only when a user press Enter. Do you have any idea how to accomplish this task?
It sounds like you want Autocomplete functionality.
I am designing a widget which has a grid of buttons. When clicked I want these buttons to present the user with 3 choices (ideally in a small drop down menu) that they can select from. When they select 1 of the 3 choices, I want that button to be selected (i.e., remain depressed). I want the QAction that is associated with each of the 3 choices to be able to know which button was clicked so that I can log which button in the grid was clicked. Each button in the grid needs to be exclusive, and when selected. The 3 choices presented are the same for all buttons.
I first started with a QButtonGroup and QPushButtons in a QGridLayout. I was able to get the buttons to be exclusive as I wanted. When I changed the buttons from QPushButton to QToolButton, and added a drop down menu, two things happened:
When they select an item from the menu, the button doesn't stay depressed like I want it to.
I can't seem to see a way for the menu action to be informed about which button was selected, so I am unable to log which button is selected.
Any thoughts on how I can achieve the functionality I am looking for?
EDIT:
A few clarifying points:
Each button in the m x n grid represents a person.
The drop down list on each button lets you select what action that person is currently doing.
Only one person can be doing something at a time. Hence, only one button in the entire grid can be depressed at a time.
The items in the button drop down menu should become checked when they are selected, and these items need to be exclusive, so if a button is clicked twice, the a new checked menu item in the drop down menu should uncheck the previous one.
When an item in the button drop down menu is selected, the menu should go away and the button should appear depressed.
I need to log the button (i.e., the row and column) that was clicked as well as the choice selected from the button drop down menu. So somehow menu item signal/slot needs to know about which button was clicked. However, QToolButton::setMenu() doesn't transfer ownership of the Menu to the QToolButton, so I'm not sure how to make the signals/slots in the QActions of the QMenu aware of which button was selected.
QObject::sender will tell you what QObject emitted the signal
I have a QDialog that contains a bunch of fields, buttons and a custom widget that inherits QTableWidget somewhere in the middle. I have the tab order set up the way I want it and it works fine, but only the first time though. After focusing on the last widget in the tab order and pressing tab again the focus goes back to the custom QTableWidget! It doesn't go back to number 1 in the tab order!
I have tried changing the tab order to something else and I still get the same result. After tabbing out of the last widget the focus goes to the table (which is #26 out of 38 in the tab order) instead of the first field.
I have tried setting "NoFocus" on the main QDialog and the custom table widget itself. I am also not using setTabOrder() anywhere on the QDialog or on my table widget.
What could be going on?